有一个 Ruby REXML 元素,如下所示:
<a_1>
<Tests>
<test enabled='1'>trans </test>
<test enabled='1'>ac </test>
<test enabled='1'>dc </test>
</Tests>
<Corners>
<corner enabled='0'>default</corner>
<corner enabled='1'>C0 </corner>
</Corners>
</a_1>
我想找到所有的叶子元素,所以结果应该是:
<test enabled='1'>trans </test>
<test enabled='1'>ac </test>
<test enabled='1'>dc </test>
<corner enabled='0'>default</corner>
<corner enabled='1'>C0 </corner>
我的代码是:
require 'rexml/document'
include REXML
def getAllLeaf(xmlElement)
if xmlElement.has_elements?
xmlElement.elements.each {|e|
getAllLeaf(e)
}
else
return xmlElement
end
end
它工作正常并且确实在屏幕上显示了正确的输出。但是,当我尝试将结果保存到数组时,我发现我遇到了问题,因为这个递归过程。因此,如果有一种方法可以将此输出保存到一个以后可以使用的数组中,我会感到很困惑?
我努力想出一种递归方式来做到这一点,虽然有点奇怪,但我想分享一下:
def getAllLeaf(eTop,aTemp=Element.new("LeafElements"))
if eTop.has_elements?
eTop.elements.each {|e|
getAllLeaf(e,aTemp)
}
else
aTemp<< eTop.dup
end
return aTemp
end