我有一个通过Web服务响应创建的常规xml对象。
我需要从某些特定键中获取一些特定值...例如:
<tag>
<tag2>
<tag3>
<needThisValue>3</needThisValue>
<tag4>
<needThisValue2>some text</needThisValue2>
</tag4>
</tag3>
</tag2>
</tag>
如何在Ruby中获取<needThisValue>
和<needThisValue2>
?
答案 0 :(得分:5)
我是Nokogiri的忠实粉丝:
xml = <<EOT
<tag>
<tag2>
<tag3>
<needThisValue>3</needThisValue>
<tag4>
<needThisValue2>some text</needThisValue2>
</tag4>
</tag3>
</tag2>
</tag>
EOT
这会创建一个用于解析的文档:
require 'nokogiri'
doc = Nokogiri::XML(xml)
使用at
查找与访问者匹配的第一个节点:
doc.at('needThisValue2').class # => Nokogiri::XML::Element
或search
找到与访问者匹配的所有节点作为NodeSet,其作用类似于数组:
doc.search('needThisValue2').class # => Nokogiri::XML::NodeSet
doc.search('needThisValue2')[0].class # => Nokogiri::XML::Element
这使用CSS访问器来定位每个节点的第一个实例:
doc.at('needThisValue').text # => "3"
doc.at('needThisValue2').text # => "some text"
再次使用CSS的NodeSet:
doc.search('needThisValue')[0].text # => "3"
doc.search('needThisValue2')[0].text # => "some text"
如果需要,可以使用XPath访问器而不是CSS:
doc.at('//needThisValue').text # => "3"
doc.search('//needThisValue2').first.text # => "some text"
浏览the tutorials以获得快速启动。它非常强大且易于使用。
答案 1 :(得分:2)
require "rexml/document"
include REXML
doc = Document.new string
puts XPath.first(doc, "//tag/tag2/tag3/needThisValue").text
puts XPath.first(doc, "//tag/tag2/tag3/tag4/needThisValue2").text
答案 2 :(得分:0)
试试this Nokogiri tutorial。 你需要安装nokogiri gem。
祝你好运。答案 3 :(得分:0)
查看Nokogiri
gem。您可以阅读一些教程enter link description here。它快速而简单。