给定以下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"