从XML获取属性值

时间:2012-10-30 15:24:43

标签: ruby nokogiri

我有这块XML:

<show name="Are We There Yet?">
  <sid>24588</sid>
  <network>TBS</network>
  <title>The Kwandanegaba Children's Fund Episode</title>
  <ep>03x31</ep>
  <link>
    http://www.tvrage.com/shows/id-24588/episodes/1065228407
  </link>
</show>

我想说“我们还在吗?”通过Nokogiri。它实际上是'show'的'name'属性。我正在努力弄清楚如何解析这个问题。

xml.at_css('show').value是我最好的猜测,但不起作用。

2 个答案:

答案 0 :(得分:4)

您可以使用以下内容:

xml.at('//show/@name').text

这是从name元素返回show属性的XPath表达式。

答案 1 :(得分:3)

使用:

require 'nokogiri'

xml =<<EOT
<show name="Are We There Yet?">
  <sid>24588</sid>
  <network>TBS</network>
  <title>The Kwandanegaba Children's Fund Episode</title>
  <ep>03x31</ep>
  <link>
    http://www.tvrage.com/shows/id-24588/episodes/1065228407
  </link>
</show>
EOT

xml = Nokogiri::XML(xml)
puts xml.at('show')['name']
=> Are We There Yet?

at接受CSS或XPath表达式,因此可以随意使用它们。如果您知道需要分别将表达式声明为CSS或XPath,请使用at_cssat_xpathat返回一个节点,因此您可以像散列一样简单地引用节点的参数。