我想删除缺少特定子节点的节点。
例如,我想在这里删除第二个<release>
节点:
<release>
<artist>Johnny Cash</artist>
<album>Live from Folsom Prison</album>
</release>
<release>
<artist>Johnny Cash</artist>
</release>
我已经尝试过:doc.xpath("//Release[album='']").remove
,但这显然不起作用,因为我需要找到专辑不存在的节点,而不是它为空的节点。
我需要的另一种选择是,当我运行这个命令albums= doc.search('release/album').map{ |t| t.text}
时,为未包含album的任何节点返回类似"empty"的东西。
你可以这样做:
doc.xpath('//release[not(album)]').remove
doc = Nokogiri::HTML::DocumentFragment.parse(html)
node_set = doc.search('release')
del_node = node_set.select { |n| n.last_element_child.name != 'album'}.first
node_set.delete(del_node)
或
doc = Nokogiri::HTML(html)
doc.xpath('//release').delete(doc.xpath('//release').last)