如何在Nokogiri找到空的结束标签?

时间:2016-01-06 10:33:24

标签: ruby-on-rails ruby nokogiri

我在Ruby中有一些与Nokogiri有关的问题。

我有一个Nokogiri XML文档,其中包含一些空的结束标记。其中一些可以嵌套几个层次。

例如;

<Authors>
     <Name>A Name</Name>
     <Titles>
          <Title1>A Book</Title1>
          <Title2/>
     </Titles>
     <Reviews>
          <Review1/>
     </Reviews>
 </Authors>
  1. 有没有人知道一种能够找到这些嵌套空标签的简单方法?或者,任何人都可以帮助您使用最简单的方法来浏览文档以找到这些元素吗?

  2. 此外,对于<Review>标记,当我找到并删除<Review1/>时,是否有一种简单的方法来检查没有其他兄弟并删除父标记,哪个现在不包含其他元素?

1 个答案:

答案 0 :(得分:0)

这是递归遍历的好地方。从文档根开始,您可以深入了解孩子,随时清理它们。如果孩子没有内容,请将其删除。

def clean(node)
  node.children.each do |child|
    clean(child)
    child.remove if child.content.gsub(/\s+/, '').empty?
  end
end

在删除之前,您可以通过清理孩子来获得第(2)部分的愿望 - 这可以确保在考虑<Review1>之前找到并删除<Reviews>。如果你不想删除现在空的父母,你可以交换这些行。

由于您的文档的格式供人类阅读,因此许多节点都包含带有空格的文本节点,因此gsub会在考虑空虚之前将其清除。

在您的输入中,最终得到:

<?xml version="1.0"?>
<Authors>
  <Name>A Name</Name>
  <Titles>
    <Title1>A Book</Title1>
  </Titles>
</Authors>