3 votes

La requête XML LINQ ne renvoie aucune donnée

J'ai expérimenté LINQ to XML aujourd'hui, mais je n'ai pas eu beaucoup de succès. Lorsque j'utilise un espace de noms, je n'obtiens aucune donnée.

Voici le xml (simplifié) :

<?xml version="1.0" encoding="UTF-8" ?>
<Message xmlns="urn:protocols:format13">
    <data>
    testdata
    </data>
</Message>

J'essaie d'obtenir les données avec (xmlmsg est une chaîne) :

XElement root = XElement.Parse(xmlmsg);
XNamespace ns = root.Attribute("xmlns").ToString();

List<XElement> datalist =
       (from desc in root.Descendants(ns + "data")
         select desc).ToList<XElement>();

Mais la liste de données reste vide. Si je n'utilise pas d'espace de noms, cela fonctionne.

J'utilisais auparavant XmlReader, qui fonctionnait bien avec les espaces de noms. Mais comme mes données xml deviennent un peu complexes à analyser, j'ai voulu utiliser LINQ.

Des indices ?

1voto

Marc Gravell Points 482669
        XNamespace ns = root.Name.Namespace;

        List<XElement> datalist =
               (from desc in root.Descendants(ns + "data")
                select desc).ToList<XElement>();

ou pourquoi cela n'a pas fonctionné ; vous n'accédez pas à la base de données des valeur de l'attribut ; cela fonctionne également :

XNamespace ns = (string)root.Attribute("xmlns");

o

XNamespace ns = root.Attribute("xmlns").Value;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X