web-dev-qa-db-fra.com

Le caractère ':', valeur hexadécimale 0x3A, ne peut pas être inclus dans un nom

J'ai un fichier xml qui contient son élément comme

<ab:test>Str</ab:test>  

Lorsque j'essaie d'y accéder en utilisant le code:

XElement tempElement = doc.Descendants(XName.Get("ab:test")).FirstOrDefault();

Cela me donne cette erreur:

System.Web.Services.Protocols.SoapException: le serveur n'a pas pu traiter la demande. ---> System.Xml.XmlException: le caractère ':', valeur hexadécimale 0x3A, ne peut pas être inclus dans un nom.

Comment dois-je y accéder?

72
coure2011

Si vous souhaitez utiliser des espaces de noms, LINQ to XML vous facilite la tâche:

XNamespace ab = "http://whatever-the-url-is";
XElement tempElement = doc.Descendants(ab + "test").FirstOrDefault();

Recherchez un xmlns:ab=... dans votre document pour savoir à quel URI d'espace de noms "ab" fait référence.

106
Jon Skeet

Essayez de mettre votre espace de noms dans { ... } ainsi:

string xfaNamespace = "{http://www.xfa.org/schema/xfa-template/2.6/}";
21
Serj Sagan

J'avais la même erreur. J'ai trouvé que j'ajoutais du code ...

var ab = "http://whatever-the-url-is";

... mais ab était une chaîne. Cela a provoqué l'erreur signalée par OP. Au lieu d'utiliser le mot clé VAR, j'ai utilisé le type de données réel XNamespace ...

XNamespace ab = "http://whatever-the-url-is";

... et le problème a disparu.

14
barrypicker

Il existe une surcharge de la méthode Get que vous pouvez essayer et qui prend en compte l'espace de noms. Essaye ça:

XElement tempElement = doc.Descendants(XName.Get("test", "ab")).FirstOrDefault();
7
Blair Scott

Essayez d'obtenir un espace de noms à partir du document

var ns = doc.Root.Name.Namespace;
3
Jason Dias