2010-10-13 9 views
0

Je le fichier XML complet dans une variable XDocument que je reçois de certaines API comme celui-ciComment extraire le contenu XML d'une variable XDocument?

using (var reader = XmlReader.Create("website")) 
     { 
      doc = XDocument.Load(reader); 
     } 

Je dois obtenir la structure du XML et de naviguer à travers ses nœuds, mais à travers la variable XDocument, je seulement obtenir le document entier dans un nœud et ne peut pas extraire chaque nœud par lui-même. Donc, une solution ou dois-je utiliser une autre façon?

Répondre

0
XmlDocument xdoc; 
xdoc = new XmlDocument(); 
xdoc.Load(XmlReader.Create("weblink")); 

Le XDocument est impossible à analyser et extraire ses valeurs XML qui est possible dans XmlDocument

+0

Je pense que ce dont vous avez besoin est XDocument.Load(). Qui est une méthode STATIC. J'ai mis à jour ma réponse pour refléter cela. –

+0

Votre méthode devrait fonctionner aussi bien que je suppose. Mais de toute façon, je n'ai pas besoin d'utiliser XDcocument; XmlDocument est plus simple, donc je l'ai utilisé. Merci pour votre participation si :) –

+0

Je ne suis pas d'accord, je trouve XDocument et XElment beaucoup plus facile à utiliser car tout est fortement typé. C'est plus vrai quand vous l'obtenez conduit par un fichier xsd. quand tu as le temps, tu t'en fais voir. –

2

http://www.hookedonlinq.com/LINQtoXML5MinuteOverview.ashx est un bon article sur la bâtir

vous pouvez également utiliser LINQ pour l'interroger

par exemple

var loaded = XDocument.Load("sdaf"); 
var q = from c in loaded.Descendants("contact") 
     where (int)c.Attribute("contactId") < 4 
     select (string)c.Element("firstName") + “ “ + 
     (string)c.Element("lastName"); 

pris hors de la page i lien ci-dessus.

Les objets XDocument et XElement donnent un coup de pied à mon avis. Si vous ne les aimez pas alors allez apprendre xpath et xslt.

0
string xml = reader.ReadToEnd(); 

XmlDocument thisXmlDoc = new XmlDocument(); 
thisXmlDoc.LoadXml(xml); // In your case DOC 

reader.Close(); 

XPathNavigator thisNavigator = thisXmlDoc.CreateNavigator(); 
XPathNodeIterator dossierNodes = thisNavigator.Select("Nodename/node"); 

List<Dossier> thisList = GetDossiers(dossierNodes); 
thisDossierList = thisList.OrderBy(c => c.something).ToList(); 

il utilise des objets XDocument, pas des objets XMLDocument. - John Nicholas Il ya 52 secondes

Merde, vous avez raison. Pardon! Seulement essayé d'aider ...

+0

il utilise des objets XDocument, pas des objets XMLDocument. –

+0

Je vois, n'ont pas l'air assez bien là ... – Younes

+0

rien ne va pas avec XMLDOcument, c'est juste que cela fonctionne mieux avec une approche XPath et XSLT. .net n'implémente que xpath 1.0 btw - ce qui affecte vraiment ce que vous pouvez faire dans xslt. Hah j'aime la façon dont tu as fait ça. Toujours préférer linq2xml. –

1

Pour obtenir les nœuds enfants immédiats de votre XDocument vous pouvez essayer

using (var reader = XmlReader.Create("website")) 
    { 
     var doc = XDocument.Load(reader); 
     var childElements = doc.Elements(); 
    } 

Effectuez ensuite un traitement supplémentaire, comme childElements.Descendants("name").Single().Value.

+0

J'ai essayé la première partie mais ça n'a pas marché, je ne suis pas sûre de la seconde. –