2010-04-13 11 views
1

Je veux analyser une réponse SOAP xml en C# (mais je ne peux pas utiliser l'interface SOAP standard, car wsld est incorrect).Comment analyser ce code XML simple en C#?

Lors de l'analyse, je veux avoir tous les éléments avec le nom (élément de la liste avec le nom) et l'accès à tous ses enfants.

L'apparence générale du XML:

<return> 
    <item> 
    <attr1>1</attr1> 
    <attr2>X</attr2> 
    </item> 
    <item> 
    <attr1>2</attr1> 
    <attr2>Y</attr2> 
    </item> 
... 
</return> 

Cordialement

+0

Google pour LINQ to XML. Il est à mon avis le moyen le plus simple d'analyser XML simple – Henri

Répondre

2

Vous pouvez utiliser une syntaxe LINQ pour accéder à votre xml. Commencez avec un nouveau en utilisant

using System.Xml.Linq; 

puis vous pouvez écrire une requête linq pour ouvrir votre fichier xml. (dans mon exemple, il s'agit d'une application web mais vous pouvez changer cela) Il suffit d'obtenir les descendants de l'élément qui regroupe les éléments que vous voulez analyser. Ensuite, faites quelque chose avec le résultat. Dans mon cas, je remplis un nouvel objet avec les valeurs exactes que je veux.

XDocument changesetXML = XDocument.Load(Server.MapPath(@"~\changesets.xml")); 

return from changeset in changesetXML.Descendants("Changeset") 
     select new NewsTopic 
     { 
      DateAdded = changeset.Element("Date").Value, 
      Content = changeset.Element("Summary").Value 
     }; 
0

Vous pouvez analyser xml avec classe XmlDocument ou classe XElement

+0

Ou à une dynamique (depuis .NET 4) – Ivo

1

LINQ pour XML, il est aussi simple que de faire quelque chose comme ce qui suit

XDocument document = XDocument.Load(fileName); // or .Parse(string) + other methods 

var query = from item in document.Descendants("item") 
      select new 
      { 
       Attr1 = (int)item.Element("attr1"), 
       Attr2 = (string)item.Element("attr2") 
      }; 
0
XmlDocument doc = new XmlDocument(); 
doc.Load(“myxml.xml"); 

foreach(XmlNode xn in doc) 
    { 
    foreach(XmlElement element in xn) 
    { 
    //do something 

    } 
}