Ruby REXML: Get Wert Eines XML-Elements
Ich versuche, die Werte von xml-Elementen in ein array mit rexml. Hier ist ein Beispiel, was ich Tue:
doc = Document.new("<data><title>This is one title</title><title>This is another title</title></data>")
XPath.each( doc, "*/title") { |element|
puts element.text
}
Jedoch, dass Ausgänge:
[<title> ... </>, <title> ... </>]
Wie ich es bekommen kann, um die Ausgabe ein array mit "Dies ist eine überschrift" und "Dies ist ein weiterer Titel"?
- Während
puts
konvertieren kann Ihr argument, das argument auf eine Zeichenfolge wie auch immer, Sie können den XPath-return der text-node in den ersten Platz:XPath.each(doc, "*/title/text()") {...
- Das war es dann. Ich musste rufen Sie die text () - Methode innerhalb der einzelnen. Danke!!!
- Sorry Lars, ich sah nur Ihren Kommentar, nachdem ich gepostet meine Antwort 🙁 Bitte postet eine Antwort, und ich werde löschen meiner.
- ok, werde das tun. Der Grund, warum ich nicht poste eine Antwort in der ersten Ort ist, weil ich dachte, basierend auf lwburk die Antwort, dass das problem wurde bereits gelöst.
- froh, dass Ihr problem gelöst ist. Ich umgewandelt mein Kommentar zu einer Antwort... also, wenn Sie wollen upvote es, das ist es.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bewegte meinen Kommentar zu einer Antwort, die pro Anfrage:
Während
puts
konvertieren kann Ihr argument, das argument auf eine Zeichenfolge wie auch immer, Sie können den XPath-return der text-node in den ersten Platz:puts
ist die Umwandlung der Ausgabe in einen string, es ist, dasselement.text
und Auswahl dertext()
in den ersten Platz gleichwertig sind (aufgrund der OP ' s Eingang).@
. Ich naiv davon ausgegangen, es würde funktionieren, und ich denke, es hat Auch:), +1 für ich bin interessiert in Erster Linie, wie Sie XPath verwenden können, minimieren die Notwendigkeit für Programmier-Konstrukte, die in die host PL. habe ich in der Regel Zustimmen.@
. Dann beschloss ich, war der Schlüssel in der Fehlermeldung, die sagte, nur ein zusätzlichen Benutzer; der Autor der Antwort wird automatisch benachrichtigt. Allerdings habe ich eben jetzt versucht, indem Sie beide in diesem Kommentar und es wurde akzeptiert w/o-Fehler! Haben Sie die Regeln geändert?Sind Sie sich da sicher? Hier ist ein komplettes Programm:
Ausgabe:
Edit: Es klingt wie der OP bewegt hat, aber ich denke, es sollte einige Klarstellungen Hinzugefügt, hier für zukünftige Besucher. Ich von Ihnen positiv bewertet werden @LarsH ist eine gute Antwort, aber es sollte angemerkt werden, dass, angesichts der OP-spezifischen input
element.text
produzieren sollte exakt die gleiche Ausgabe als würde das Ergebnis von der Auswahl dertext()
Knoten in den ersten Platz. Von die docs:Sample-Eingang in der ursprünglichen Frage zeigt
<title>
Elemente, die nur einen text-Knoten in jedem Fall. Daher werden diese beiden Methoden sind die gleichen (in diesem Fall).Jedoch, beachten Sie diesen wichtigen Hinweis:
Erhalten Sie alle eines Elements child-text-nodes unter Verwendung von
texts()
(plural).Was ich vermute, eine Menge Leute sind wirklich Suche, ist ein äquivalent für das DOM -
textContent
(oder seine uneheliche cousininnerText
). Hier ist, wie Sie tun könnten, das in Ruby:Dieser schließt alle den text Nachkommen jedes element in einer einzelnen Zeichenfolge.
Die kurze Antwort ist, dass es keine kurze Antwort. Die eine dieser, die Sie wollen, wenn überhaupt, ist stark Kontext-spezifisch. Die einzige Anforderung in der ursprünglichen Frage ist "die Werte von xml-Elementen in ein array", die nicht wirklich viel für eine Spezifikation.