Ruby Nokogiri检查XML元素是否有子节点

Ruby Nokogiri检查XML元素是否有子节点,ruby,xml,nokogiri,Ruby,Xml,Nokogiri,给定的XML结构类似于: <homes> <home> <name>home 1</name> </home> <home> <name>home 2</name> </home> </homes> <flats> <flat>Flat 1</flat> </fla

给定的XML结构类似于:

<homes>
    <home>
        <name>home 1</name>
    </home>
    <home>
        <name>home 2</name>
    </home>
</homes>
<flats>
    <flat>Flat 1</flat>
</flats>

家1
家2
公寓1
使用Ruby和nokogiri,如何迭代节点并检查子元素是另一个元素还是文本节点

基本上,如果子节点是另一个元素,我需要修改我对输出的处理,而不是如果它只是一个文本节点

我需要在不知道密钥名称的情况下执行此操作

作为一个例子,如果我检查键名(我知道这有一个子元素),我可以完全按照我想要的做,但是这需要是通用的,而不是特定于数据的

这是通过检查密钥名称得到的:

repeatingElements = []
        nodes.each do |element|
          case element
          when Nokogiri::XML::Element
            child_content = map_content(element.children, {})
            if element.name === 'home'
              repeatingElements << {
                element.name => child_content
              }
              content_hash = repeatingElements
            else
              content_hash[element.name] = child_content unless child_content.empty?
            end
          when Nokogiri::XML::Text
            return element.content
          end
        end
        content_hash
      end
repeatingElements=[]
节点。每个do |元素|
案例元素
当Nokogiri::XML::Element
child_content=map_content(element.children,{})
如果element.name=='home'
重复元素子内容
}
content\u hash=repeatingElements
其他的
content\u hash[element.name]=子内容,除非子内容为空?
结束
当Nokogiri::XML::Text
返回元素.content
结束
结束
内容哈希
结束

我试图避免使用这种方法:
如果element.name=='home'
与实际数据一样,我可能不知道密钥名称。

为什么你不能尝试一种更简单的方法, 基于示例xml文档,此伪代码必须有效。每个“Nokogiri::xml::ELEMENT”都有一个名为“next_ELEMENT”的方法,您可以通过以下方式利用该方法

xml_doc.elements.each do|ele|
#迭代文档中的子项“
ele.children.每个do | child | u ele|
#检查下一个元素是否属于nokogiri文本类
除非child_ele.next_element.class=='Nokogiri::XML::Text'
#对非文本的子元素执行某些操作
其他的
#对文本元素做些什么
结束
结束
结束