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"?
risposta
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;
'RemoveEmptyEntries' non è una buona idea,' // 'ha un significato specifico in XPath ed è per cercare tutti i discendenti. – svick
È 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.
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.
avevo bisogno di fare qualcosa di simile. Questo repo ha diversi test unitari per la dimostrazione di query XDocument con XPathEvaluate()
possibile duplicato di [come utilizzare XPath con XDocument?] (Http://stackoverflow.com/questions/6209841/how-to-use-xpath-with -xdocument) –
È possibile visualizzare un esempio selezionando percorsi diversi, con/senza definizioni di spazi dei nomi, ecc. qui: http://stackoverflow.com/a/38272604/5838538. – Jelgab