Ich möchte ein XDocument
Objekt für einen bestimmten Pfad abfragen (z. B. "/ Pfad/zu/Element/ich/wollen"), aber ich weiß nicht weiter.Wie kann ich ein XDocument mit einem 'Pfad' abfragen?
Antwort
soemthing ähnlich wie dies funktionieren könnte:
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' ist keine gute Idee,' // 'hat in XPath eine spezielle Bedeutung und es wird nach allen Nachkommen gesucht. – svick
Sie Methoden von System.Xml.XPath.Extensions
verwenden können, dies zu tun.
Zum Beispiel, wenn Sie ein einzelnes Element auswählen möchten, würden Sie XPathSelectElement()
verwenden:
var element = doc.XPathSelectElement("/path/to/element/I/want");
Die Abfragen sein müssen keine einfache Wege wie das, was Sie beschrieben, verwenden sie die XPath Sprache.
Auch wenn dies ein etwas älterer Beitrag, sei darauf hingewiesen, dass LINQ-to-XML
kann als Alternative zu System.XML.XPath
verwendet werden, um Elemente auf einem Weg in einem XDocument
Beispiel basieren zu finden:
var results = x.Elements("path").Elements("to").Elements("element").Elements("I").Elements("want").FirstOrDefault();
Hinweis: Der LINQ to XML-Befehl muss möglicherweise geändert werden, um die tatsächliche Struktur und/oder Kardinalität des XML zu berücksichtigen.
Ich brauchte etwas Ähnliches zu tun. Diese repo hat mehrere Komponententests Demo XDocument Abfrage mit XPathEvaluate()
mögliche Duplikat von [wie XPath mit XDocument zu verwenden?] (Http://stackoverflow.com/questions/6209841/how-to-use-xpath-with -xdocument) –
Sie können ein Beispiel sehen, indem Sie hier verschiedene Pfade mit/ohne Namensraumdefinitionen usw. auswählen: http://stackoverflow.com/a/38272604/5838538. – Jelgab