Mam proste zadanie dostępu do wartości niektórych atrybutów. Poniżej znajduje się prosty skrypt, który używa Nokogiri::XML::Builder
do utworzenia prostego dokumentu xml.Jak uzyskać dostęp do atrybutów za pomocą Nokogiri
require 'nokogiri'
builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
xml.Placement(:messageId => "392847-039820-938777", :system => "MOD", :version => "2.0") {
xml.objects {
xml.object(:myattribute => "99", :anotherattrib => "333")
xml.nextobject_ '9387toot'
xml.Entertainment "Last Man Standing"
}
}
end
puts builder.to_xml
puts builder.root.attributes["messageId"]
Wyniki są poniżej:
<?xml version="1.0" encoding="UTF-8"?>
<Placement messageId="392847-039820-938777" version="2.0" system="MOD">
<objects>
<object anotherattrib="333" myattribute="99"/>
<nextobject>9387toot</nextobject>
<Entertainment>Last Man Standing</Entertainment>
</objects>
</Placement>
C:/Ruby/lib/ruby/gems/1.8/gems/nokogiri-1.4.2-x86-mingw32/lib/nokogiri/xml/document.rb:178:in `add_child': Document already has a root node (RuntimeError)
from C:/Ruby/lib/ruby/gems/1.8/gems/nokogiri-1.4.2-x86-mingw32/lib/nokogiri/xml/node.rb:455:in `parent='
from C:/Ruby/lib/ruby/gems/1.8/gems/nokogiri-1.4.2-x86-mingw32/lib/nokogiri/xml/builder.rb:358:in `insert'
from C:/Ruby/lib/ruby/gems/1.8/gems/nokogiri-1.4.2-x86-mingw32/lib/nokogiri/xml/builder.rb:350:in `method_missing'
from C:/Documents and Settings/etrojan/workspace/Lads/tryXPATH2.rb:15
XML, który jest generowany wygląda dobrze. Jednak próby uzyskania dostępu do atrybutów powodują wygenerowanie błędu:
Document already has a root node
Nie rozumiem, dlaczego instrukcja puts spowodowałaby ten błąd. Wszelkie sugestie będą bardzo mile widziane.
Great Stuff , pomogło mi to o 2:22 podczas całego weekendowego codefestu. Gracias. –
Szukałem tego kodu http://www.dzone.com/snippets/finding-elements-attributes i łamałem sobie głowę, ponieważ używałem @ outside [. To był prawdziwy zbawiciel. Zmarnowałem 2 dni, aby znaleźć sposób na przeanalizowanie atrybutów xml i to jest prawdziwy zbawca. Będzie miło, jeśli ten link zostanie dodany do nokogiri –
możesz użyć xpath, aby uzyskać wartości atrybutów 'nokogiri_element.xpath (" @ id "). Text()' – stopanko