2011-08-05 7 views
11

Chcę ograniczyć moje wyszukiwanie węzła podrzędnego do bieżącego węzła, w którym się znajduję. Na przykład, mam następujący kod:Składnia XmlNode.SelectSingleNode do wyszukiwania w węźle C#

XmlNodeList myNodes = xmlDoc.DocumentElement.SelectNodes("//Books"); 
    foreach (XmlNode myNode in myNodes) 
    { 
     string lastName = ""; 
     XmlNode lastnameNode = myNode.SelectSingleNode("//LastName"); 
     if (lastnameNode != null) 
     { 
       lastName = lastnameNode.InnerText; 
     } 
    } 

chcę element Nazwisko być przeszukiwane od wewnątrz bieżącego mój_węzeł wewnątrz foreach. Co się dzieje, to że znalezione Nazwisko jest zawsze z pierwszego węzła z moimi węzłami. Nie chcę kodować dokładnej ścieżki do LastName, ale zamiast tego pozwolić jej być elastyczną, jeśli chodzi o to, gdzie wewnątrz mojegoNode zostanie znaleziony. Myślałem, że przy użyciu metody SelectSingleNode w myNode ograniczyłoby wyszukiwanie tylko do zawartości xml w moimNode i nie obejmuje węzłów nadrzędnych.

Odpowiedz

27

Wiodący // zawsze zaczyna się od katalogu głównego dokumentu; używać .// rozpocząć w węźle bieżącym i szukać tylko jego potomków:

XmlNode lastnameNode = myNode.SelectSingleNode(".//LastName"); 
+0

z „” działało świetnie. Czy wiesz, gdzie można znaleźć tę składnię? Szukałem tego rodzaju informacji i znalazłem "//", ale nie "." Myślę, że jest inna składnia, której mogę użyć. – user31673

+0

[Składnia XPath] (http://www.w3schools.com/xsl/xpath_syntax.asp) –

+0

Zaktualizowany odnośnik do składni XPath, do której dodano @bobo.ezhe: https://www.w3schools.com/xml/xpath_syntax.asp – PolyTekPatrick

1

Faktycznie, problem dotyczy XPath. XPath syntax // oznacza wybrania węzłów w dokumencie z obecnego węzła, który zgadza się na wybór bez względu na to gdzie się znajdują

więc wszystko, co potrzebne jest, aby zmienić

myNode.SelectSingleNode(".LastName") 
+0

To tylko jeden poziom w dół. OP powiedział, że chce go znaleźć w dowolnym miejscu w podtekście. –