Frage

Ich brauche die untergeordneten Knoten eines Knotens mit XPath zu bekommen, wie ich „Drill-down“ in einen Knoten will. Hier ist der Code Ich versuche:

xml_ns = 'Document:http://www.google.com/books/'  

xml_document = XML::Document.file('./test_pages/test.xml')  
book_xpath = '//Document:View/Document:Books'  
book_title_xpath = '//Document:Title'  

xml_document.find(book_xpath, xml_ns).each() { | item |  
    puts item  
    item.find(book_title_xpath, xml_ns).each() { |item2|  
        puts '========================'  
        puts 'name: ' + item2.content().strip()  
    }  
}  

Und hier ist ein XML-Fragment

 <Document xmlns="http://www.google.com/books/">  
     <View>  
         <Books>  
             <Title>pragmatic programming</Title>  
         </Books>  

         <Comics>  
             <Title>x-men</Title>  
         </Comics>  
     </View>  
 </Document>  

Die ersten Fund Arbeiten finden und gibt die Bücher Knoten. Doch die zweite find ( ‚// Dokument: Titel‘) zurückkehrt alle Titel Knoten im Dokument, obwohl ich nur in dem gefundenen Knoten bin auf der Suche

.

Warum soll dies geschehen? Ich habe müde, um das zweite XPath ändern, aber nichts, was ich habe müde funktioniert. Jede Beratung?

War es hilfreich?

Lösung

Die zurück xml_document Knoten sind nie von der ursprünglichen Quelle gebrochen. Sie können immer hin und her bewegen, der einzige Unterschied ist, dass der „Zeiger“ auf dem aktuellen Ergebnisknoten ist.

Was Sie tun müssen, ist Ihre XPath zu ändern, so dass es nicht eine „vollständige Dokumentsuche“ macht: der besonderen // (die „descendant-or-self“ ) bei der beginnt Wurzel- und durchläuft alle Knoten. Verwenden Sie stattdessen wie folgt vor:

book_title_xpath = 'Document:Title'

, die das erste Kind mit dem Namen „Titel“ zurück. Wenn Sie alle untergeordneten Knoten aus dem Buch Knoten suchen, dann können Sie wie folgt vor:

book_title_xpath = './/Document:Title'

, die die . und Mittel fügt „auf dem aktuellen Knoten starten und den aktuellen Knoten suchen und alle Nachkommen“ .

Andere Tipps

Versuch

book_title_xpath = 'Title'

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top