Ruby Nokogiri检查XML元素是否有子节点
给定的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
<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'
#对非文本的子元素执行某些操作
其他的
#对文本元素做些什么
结束
结束
结束