用Nokogiri获取节点的兄弟姐妹
有没有办法在节点中找到特定值然后返回其所有兄弟值?
例如,我想找到包含ID 5678的id
节点,然后获取电子邮件地址和与ID 5678相关的所有图像。
Nokogiri::XML.parse(File.open('info.xml'))
这是一个示例XML文件。
1234 sdfsdf@sdasd.com images/1.jpg images/2.jpg images/3.jpg 5678 zzzz@zzz.com images/4.jpg images/5.jpg 9011 aaaa@aaa.com images/6.jpg images/7.jpg
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 # => "zzzz@zzz.com" 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 #=> ["zzzz@zzz.com", "images/4.jpg", "images/5.jpg"]
使用带有xml的css有点奇怪,但它比查看更容易(比xpath)。