使用Nokogiri获取节点的兄弟节点
有没有办法在节点中查找特定值,然后返回其所有兄弟值?使用Nokogiri获取节点的兄弟节点
例如,我想找到找到包含ID 5678 id
节点,然后获得的电子邮件地址和ID 5678
Nokogiri::XML.parse(File.open('info.xml'))
相关联的所有图像下面是一个示例XML文件。
<xmlcontainer> <details>
<id>1234</id>
<email>[email protected]</email>
<image>images/1.jpg</image>
<image>images/2.jpg</image>
<image>images/3.jpg</image>
</details>
<details>
<id>5678</id>
<email>[email protected]</email>
<image>images/4.jpg</image>
<image>images/5.jpg</image>
</details>
<details>
<id>9011</id>
<email>[email protected]</email>
<image>images/6.jpg</image>
<image>images/7.jpg</image>
</details>
</xmlcontainer>
回答:
require 'nokogiri' doc = Nokogiri::XML.parse(File.open('info.xml'))
details = doc.css('details').find{|node| node.css('id').text == "5678"}
email = details.css('email').text # => "[email protected]"
images = details.css('image').map(&:text) # => ["images/4.jpg", "images/5.jpg"]
更新:有短,可以说是更好的,方法来抓住你想要的details
节点:
details = doc.at('details:has(id[text()="5678"])')
或
details = doc.search('id[text()="5678"] ~ *')
这些都是双方礼貌pguardiario。
回答:
您可以使用~
,这是CSS一般兄弟选择:
doc.search('id[text()="5678"] ~ *').map &:text #=> ["[email protected]", "images/4.jpg", "images/5.jpg"]
这很奇怪使用CSS与XML一点点,但它是如此容易得多看看(比XPath的)。
以上是 使用Nokogiri获取节点的兄弟节点 的全部内容, 来源链接: utcz.com/qa/263953.html