Grundsätzlich möchte ich den absoluten Pfad von einem Knoten zum root extrahieren und es an die Konsole oder eine Datei melden. Im Folgenden finden Sie die aktuelle Lösung:Wie bekomme ich den absoluten Knotenpfad in XML mit XPath und Ruby?
require "rexml/document"
include REXML
def get_path(xml_doc, key)
XPath.each(xml_doc, key) do |node|
puts "\"#{node}\""
XPath.each(node, '(ancestor::#node)') do |el|
# puts el
end
end
end
test_doc = Document.new <<EOF
<root>
<level1 key="1" value="B">
<level2 key="12" value="B" />
<level2 key="13" value="B" />
</level1>
</root>
EOF
get_path test_doc, "//*/[@key='12']"
Das Problem ist, dass es mir "<level2 value='B' key='12'/>"
als Ausgang gibt. Gewünschte Ausgabe ist <root><level1><level2 value='B' key='12'/>
(Format könnte anders sein, das Hauptziel ist es, einen vollständigen Pfad zu haben). Ich habe nur grundlegendes Wissen von XPath und würde jede mögliche Hilfe/Anleitung schätzen, wohin man schaut und wie man das erreicht.
ich frage mich, ob es irgendwelche Lösungen mit REXML sind. Die Installation von Nokogiri ist ziemlich kompliziert und ich habe keinen Root-Zugriff auf die Server-Box, wo das Skript ausgeführt wird. –
Nokogiri Installation ist überhaupt nicht kompliziert. Es erfordert libxml, aber viele XML-Parser benötigen es auch, also ist es schon auf vielen Systemen. Probiere 'locate libxml2 | grep/lib/'zu sehen; Es sollte in etwas wie '/ usr/lib/libxml2' erscheinen. Wenn Sie keinen Zugriff auf die Installation als Root haben, können Sie in alternative Verzeichnisse installieren, einschließlich Ihrer eigenen. Viele von uns verwenden und empfehlen [RVM] (http://rvm.beginrescueend.com), um lokale ('~/.rvm') Ruby-Installationen zu verwalten. –
Danke für die Hilfe. Leider muss ich mit REXML gehen (vorerst ist es sehr teuer, diese alte Server-Box und Cygwin-Installation auf mehreren Dev-Boxen zu aktualisieren). Langfristig werde ich definitiv auf Nokogiri umsteigen (hauptsächlich wegen der Leistung). –