我有 getElementText 如下,它与 [0] 配合得很好,因为我正在处理的 XML 没有重复的标签。
from xml.dom import minidom
def getElementText(element, tagName):
return str(element.getElementsByTagName(tagName)[0].firstChild.data)
doc = minidom.parse("/Users/smcho/Desktop/hello.xml")
outputTree = doc.getElementsByTagName("Output")[0]
print getElementText(outputTree, "Number")
但是,当我解析以下 XML 时,我无法获取值 <Number>0</Number>
但是<ConnectedTerminal><Number>1</Number></ConnectedTerminal>
与 getElementText(outputTree, "Number")
,因为 getElementText 函数返回带有标签“Number”的两个元素中的第一个。
<Output>
<ConnectedTerminal>
<Node>5</Node>
<Number>1</Number>
</ConnectedTerminal>
<Type>int8</Type>
<Number>0</Number>
</Output>
这个问题有解决办法吗?有什么办法只得到<Number>0</Number>
或<ConnectedTerminal><Number>1</Number></ConnectedTerminal>
.
最佳答案
如果lxml是一个选项(它比 minidomyou 好得多)可以做到:
from lxml import etree
doc = etree.fromstring(xml)
node = doc.find('Number')
print node.text # 0
node = doc.xpath('//ConnectedTerminal/Number')[0]
print node.text # 1
另请参阅xpath教程。
关于python - 当相同标签位于 XML 中的子树中时,使用 Python 获取唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3974464/