//
na początku wyrażenia XPath rozpoczyna się od głównego katalogu dokumentu. Spróbuj ".//stuffChild". . jest skrótem dla self :: node(), który ustawi kontekst dla wyszukiwania, a // jest skrótem dla osi potomnej.
Więc trzeba:
XmlNode stuffChild = stuff.SelectSingleNode(".//stuffChild");
co przekłada się na:
XmlNode stuffChild = stuff.SelectSingleNode ("self :: node()/potomek :: stuffChild");
xmlNode stuffChild = stuff.SelectSingleNode("self::node()/descendant-or-self::stuffChild");
W przypadku, gdy węzeł dziecko może mieć taką samą nazwę jak rodzic, co chcesz użyć nieco bardziej rozwlekły składni, który następuje, w celu zapewnienia, że nie ponownie wybrać rodzica:
xmlNode stuffChild = stuff.SelectSingleNode("self::node()/descendant::stuffChild");
Należy również pamiętać, że jeśli „stuffChild” jest bezpośrednim potomkiem „rzeczy”, można całkowicie pominąć przedrostki i po prostu wybrać „stuffChild”.
XmlNode stuffChild = stuff.SelectSingleNode("stuffChild");
Samouczek W3Schools zawiera przydatne informacje w łatwym do zrozumienia formacie.
.//foo jest ** nie ** równe potomkowi :: foo i ogólnie jest ** błędne ** sposób wybierania węzłów potomnych. Zobacz http://stackoverflow.com/questions/453191/ –
Być może przegapiłeś., Który określa kontekst następnej ścieżki XPath? –
Proszę zapoznać się z dokumentacją // skrótu. .//foo tłumaczy na self :: node()/descendent-or-self :: node()/child :: stuffChild –