2017-02-08 3 views
-1

Ich habe eine XML-Datei:Wie eine XML-Datei mit Nokogiri und Ruby analysieren

<root> 
    <person name="brother">Abhijeet</person> 
    <person name="sister">pratiksha</person> 
</root> 

Ich will es mit Nokogiri analysieren. Ich habe versucht, mit CSS und XPath, aber es gibt Null oder den ersten Wert des Elements zurück. Wie kann ich andere Werte abrufen? Ich habe versucht:

doc = Nokogiri::XML(xmlFile) 
doc.elements.each do |f| 
    f.each do |y| 
     p y 
    end 
end 

und:

doc.xpath("//person/sister") 
doc.at_xpath("//person/sister") 
+1

Bitte geben Sie Ihren Code ein. –

+0

Bitte lesen Sie "[mcve]". Hast du die Nokogiri-Tutorials gelesen? Sie diskutieren, wie Informationen gesucht und extrahiert werden. Haben Sie im Internet nach dem Parameter eines Knotens gesucht, der auf dem Wert basiert? Ihr Selektor stimmt nicht, also wird die Suche erklären, was zu tun ist. http://meta.stackoverflow.com/q/261592/128421 ist auch wichtig. –

Antwort

0

Dies ist die grundlegende Art und Weise für einen Knoten mit einem bestimmten Parameter und Wert mit CSS zu suchen:

require 'nokogiri' 

doc = Nokogiri::XML(<<EOT) 
<root> 
    <person name="brother">Abhijeet</person> 
    <person name="sister">pratiksha</person> 
</root> 
EOT 

doc.at('person[name="sister"]').to_html # => "<person name=\"sister\">pratiksha</person>" 

Sie zu Forschung braucht CSS und XPath und wie ihre Syntax funktioniert. In XPath bedeutet //person/sister Suche überall für <sister> Knoten innerhalb <person> Knoten, etwas passend wie:

<root> 
    <person> 
    <sister /> 
    </person> 
    <person> 
    <sister /> 
    </person> 
</root> 

Wo es alle <sister /> Knoten finden würde. Es sucht nicht nach dem Parameter eines Knotens.

Tun Sie das nicht:

doc.elements.each do |f| 
    f.each do |y| 
     p y 
    end 
end 

Sie werden eine Menge CPU durch jedes Element zu Fuß verschwenden. Erfahren Sie stattdessen, wie Selektoren funktionieren, sodass Sie die Vorteile von libXML nutzen können.

Verwandte Themen