如何使用Nokogiri选择元素



给定以下XML,我想获得Name="Cat"的值"0123456":

xml.xpath '//Custom[Name="Cat"]'

给我第一个自定义,这是正确的,但我只想要"值"而不是整个自定义节点。

<body>
  <Custom>
    <count>1</count>
    <Name>Cat</Name>
    <Value>0123456</Value>
  </Custom>
  <Custom>
    <count>2</count>
    <Name>Dog</Name>
    <Value>9876543</Value>
  </Custom>
<body>

我只想要"Value",而不是整个自定义节点。

所以继续写路径:

//Custom[Name="Cat"]/Value

为了可读性,我更喜欢使用CSS选择器而不是XPath,因为通常CSS包含较少的视觉干扰:

需要"nokogiri"

doc = Nokogiri::HTML(<<EOT)
<body>
  <Custom>
    <count>1</count>
    <Name>Cat</Name>
    <Value>0123456</Value>
  </Custom>
  <Custom>
    <count>2</count>
    <Name>Dog</Name>
    <Value>9876543</Value>
  </Custom>
<body>
EOT
foo = doc.search('name:contains("Cat")').map{ |node|
  node.next_element.text
}
foo # => ["0123456"]

这个工作是因为Nokogiri包含了一些jQuery CSS扩展,从而产生了一些有用的添加。

要获取value元素文本,您需要像下面这样设置xpath:

doc = Nokogiri::HTML(<<EOT)
<body>
  <Custom>
    <count>1</count>
    <Name>Cat</Name>
    <Value>0123456</Value>
  </Custom>
  <Custom>
    <count>2</count>
    <Name>Dog</Name>
    <Value>9876543</Value>
  </Custom>
<body>
EOT
val=doc.xpath("//Custom[Name='Cat']/Value").text()

val => "0123456"

相关内容

  • 没有找到相关文章

最新更新