我有一个从Web服务的响应创建的常规xml对象.
我需要从某些特定键中获取一些特定值...例如:
<tag>
<tag2>
<tag3>
<needThisValue>3</needThisValue>
<tag4>
<needThisValue2>some text</needThisValue2>
</tag4>
</tag3>
</tag2>
</tag>
Run Code Online (Sandbox Code Playgroud)
我怎样才能<needThisValue>和<needThisValue2> Ruby的?
我是Nokogiri的忠实粉丝:
xml = <<EOT
<tag>
<tag2>
<tag3>
<needThisValue>3</needThisValue>
<tag4>
<needThisValue2>some text</needThisValue2>
</tag4>
</tag3>
</tag2>
</tag>
EOT
Run Code Online (Sandbox Code Playgroud)
这将创建一个用于解析的文档:
require 'nokogiri'
doc = Nokogiri::XML(xml)
Run Code Online (Sandbox Code Playgroud)
使用at找到匹配的存取的第一个节点:
doc.at('needThisValue2').class # => Nokogiri::XML::Element
Run Code Online (Sandbox Code Playgroud)
或者search找到与访问者匹配的所有节点作为NodeSet,其作用类似于Array:
doc.search('needThisValue2').class # => Nokogiri::XML::NodeSet
doc.search('needThisValue2')[0].class # => Nokogiri::XML::Element
Run Code Online (Sandbox Code Playgroud)
这使用CSS访问器来定位每个节点的第一个实例:
doc.at('needThisValue').text # => "3"
doc.at('needThisValue2').text # => "some text"
Run Code Online (Sandbox Code Playgroud)
使用CSS再次使用NodeSet:
doc.search('needThisValue')[0].text # => "3"
doc.search('needThisValue2')[0].text # => "some text"
Run Code Online (Sandbox Code Playgroud)
如果需要,可以使用XPath访问器而不是CSS:
doc.at('//needThisValue').text # => "3"
doc.search('//needThisValue2').first.text # => "some text"
Run Code Online (Sandbox Code Playgroud)
通过去教程获得的JumpStart.它非常强大且易于使用.
| 归档时间: |
|
| 查看次数: |
371 次 |
| 最近记录: |