2012-06-27 2 views
18

Vorrei interrogare un oggetto XDocument per un determinato percorso, (ad esempio "/ percorso/elemento// I/volere") ma non so come procedere.Come posso interrogare un XDocument con un "percorso"?

+0

possibile duplicato di [come utilizzare XPath con XDocument?] (Http://stackoverflow.com/questions/6209841/how-to-use-xpath-with -xdocument) –

+0

È possibile visualizzare un esempio selezionando percorsi diversi, con/senza definizioni di spazi dei nomi, ecc. qui: http://stackoverflow.com/a/38272604/5838538. – Jelgab

risposta

2

soemthing simile a questo potrebbe funzionare:

var path = "/path/to/element/I/want"; 
var route = path.Split(new []{'/'}, StringSplitOptions.RemoveEmptyEntries); 

XElement result = null; 
foreach (var node in route) 
{ 
    if (result == null) 
    { 
     result = _xmlDocument.Element(node);  
    } 
    else 
    { 
     result = result.Element(node); 
    } 
} 

return result; 
+1

'RemoveEmptyEntries' non è una buona idea,' // 'ha un significato specifico in XPath ed è per cercare tutti i discendenti. – svick

41

È possibile utilizzare i metodi da System.Xml.XPath.Extensions per fare questo.

Ad esempio, se si desidera selezionare un singolo elemento, è necessario utilizzare XPathSelectElement():

var element = doc.XPathSelectElement("/path/to/element/I/want"); 

Le query non devono essere percorsi semplici come quello che hai descritto, che usano il linguaggio XPath.

+6

In 4.5, utilizzare System.Xml.XPath. – lionheart

+6

@lionheart Non è esattamente quello che ho suggerito? E lo spazio dei nomi 'System.Xml.XPath' non è certamente nuovo in .Net 4.5. – svick

4

Anche se questo è un post un po 'più vecchio, va notato che LINQ-to-XML può essere usato come alternativa al System.XML.XPath trovare elementi sulla base di un percorso all'interno di un XDocument

Esempio:

var results = x.Elements("path").Elements("to").Elements("element").Elements("I").Elements("want").FirstOrDefault(); 

Nota: potrebbe essere necessario modificare il comando LINQ su XML per tenere conto della struttura e/o della cardinalità effettiva dell'XML.

https://msdn.microsoft.com/en-us/library/bb675156.aspx

0

avevo bisogno di fare qualcosa di simile. Questo repo ha diversi test unitari per la dimostrazione di query XDocument con XPathEvaluate()