鉴于以下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>
答案 0 :(得分:2)
我只想要&#34;价值&#34;不是整个自定义节点。
所以继续写下这条路:
ID Name State
1 John nan
1 John nan
2 Smith NE
3 Janet nan
3 Janet nan
3 Janet nan
答案 1 :(得分:1)
为了便于阅读,我更喜欢在XPath上使用CSS选择器,因为CSS通常包含较少的视觉噪音:
要求&#39; nokogiri&#39;
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扩展,从而产生了一些有用的补充。
答案 2 :(得分:0)
要获取值元素文本,您需要设置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 =&gt; &#34; 0123456&#34;