2012-06-27 12 views
18

Chciałbym zapytać o obiekt XDocument dla danej ścieżki (np. "/ Path/to/element/I/want"), ale nie wiem, jak kontynuować.Jak mogę zapytać XDocument za pomocą "ścieżki"?

+0

możliwy duplikat [jak korzystać z XPath z XDocumentem?] (Http://stackoverflow.com/questions/6209841/how-to-use-xpath-with -xdocument) –

+0

Możesz zobaczyć przykład wybierając różne ścieżki z definicjami przestrzeni nazw/bez itp. tutaj: http://stackoverflow.com/a/38272604/5838538. – Jelgab

Odpowiedz

2

czegos potrzebowalem podobny do tego może pracować:

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' nie jest dobrym pomysłem,' // 'ma określone znaczenie w XPath i polega na wyszukiwaniu wszystkich potomków. – svick

41

Można użyć metody z System.Xml.XPath.Extensions to zrobić.

Na przykład, jeśli chcesz wybrać jeden element, to użyłby XPathSelectElement():

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

Zapytania nie muszą być proste ścieżki, jak to, co opisano, używają języka XPath.

+6

W 4.5, użyj System.Xml.XPath. – lionheart

+6

@lionheart Czy nie jest to dokładnie to, co sugerowałem? A przestrzeń nazw 'System.Xml.XPath' z pewnością nie jest nowa w .Net 4.5. – svick

4

Choć jest to nieco starsza poczta, należy zauważyć, że LINQ-to-XML mogą być stosowane jako alternatywa dla System.XML.XPath znaleźć elementy oparte na ścieżce wewnątrz XDocument

Przykład:

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

Uwaga: Polecenie LINQ do XML może wymagać zmiany w celu uwzględnienia faktycznej struktury i/lub liczności XML.

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

0

muszę zrobić coś podobnego. Ten repo ma kilka testów jednostkowych demonstrujących zapytanie XDocument za pomocą XPathEvaluate()

Powiązane problemy