我有一个访问某些属性的值的简单任务。这是一个简单的脚本,使用Nokogiri::XML::Builder
创建一个简单的 XML 文档。
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"]
结果是:
<?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 看起来不错。但是,我尝试访问属性会导致生成错误:
Document already has a root node
我不明白为什么puts
会导致这个错误。
Using Nokogiri::XML::阅读器 http://nokogiri.rubyforge.org/nokogiri/Nokogiri/XML/Reader.html适用于您的示例,但可能不是您正在寻找的完整答案(请注意,有no attributes构建器的方法 http://nokogiri.rubyforge.org/nokogiri/Nokogiri/XML/Builder.html).
reader = Nokogiri::XML::Reader(builder.to_xml)
reader.read #Moves to next node in document
reader.attribute("messageId")
请注意,如果您发出reader.read
再次然后尝试reader.attribute("messageId")
结果将是nil
因为当前节点不会有这个属性。
你可能想做的是使用Nokogiri::XML::文档 http://nokogiri.rubyforge.org/nokogiri/Nokogiri/XML/Document.html如果您想按属性搜索 XML 文档。
doc = Nokogiri::XML(builder.to_xml)
elems = doc.xpath("//*[@messageId]") #get all elements with an attribute of 'messageId'
elems[0].attr('messageId') #gets value of attribute of first elem
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)