给出类似于:
的XML结构echo mv
使用Ruby和nokogiri如何迭代节点并检查子元素是否是另一个元素或文本节点?
基本上,如果子节点是另一个元素,我需要修改我对输出的处理,而不是它只是一个文本节点。
我需要在不知道密钥名称的情况下这样做。
作为一个例子,如果我检查密钥名称(因为我知道它有一个子元素),我可以完全按照我想要的那样做,但是这需要是通用的而不是数据特定的。
这是我通过检查密钥名称所拥有的:
<homes>
<home>
<name>home 1</name>
</home>
<home>
<name>home 2</name>
</home>
</homes>
<flats>
<flat>Flat 1</flat>
</flats>
我试图避免使用这个: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
和实际数据一样,我可能不知道密钥名称。
答案 0 :(得分:-1)
为什么你不能尝试更简单的方法, 基于您的示例xml doc,此伪代码必须正常工作.EVERY'Nokogiri :: XML :: ELEMENT'有一个名为'next_element'的方法,您可以通过以下方式利用该方法
xml_doc.elements.each do |ele|
#iterate over children in the doc"
ele.children.each do |child_ele|
#check if the next element belongs to nokogiri text class
unless child_ele.next_element.class == 'Nokogiri::XML::Text'
#do something with child_elements which are not text
else
#do something with text element
end
end
end