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?
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.
Essayez de mettre votre espace de noms dans {
... }
ainsi:
string xfaNamespace = "{http://www.xfa.org/schema/xfa-template/2.6/}";
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.
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();
Essayez d'obtenir un espace de noms à partir du document
var ns = doc.Root.Name.Namespace;