使用 DOM (Python) 在 XML 的元素中搜索特定文本

Search for specific text in an element of XML with DOM (Python)

对于 Python 中的程序,我正在寻找一种在 XML 的元素中查找特定文本并找出它是哪个节点号的方法。

这是xml:

-<shortcut>
<label>33060</label>
<label2>Common Shortcut</label2>
</shortcut>

-<shortcut>
<label>Test</label>
</shortcut>

当然我知道这里可能是节点号 2,但是 xml 文件可以更长。

这是我尝试过的方法,但我无法正常工作:

xmldoc = minidom.parse("/DATA.xml")
Shortcut = xmldoc.getElementsByTagName("shortcut")
Label = xmldoc.getElementsByTagName("label")
print xmldoc.getElementsByTagName("label")[12].firstChild.nodeValue (works)
for element in Label:
  if  element.getAttributeNode("label") == 'Test':
  # if element.getAttributeNode('label') == "Test":
    print "element found"
else:
    print "element not found"

for node in xmldoc.getElementsByTagName("label"):
    if node.nodeValue == "Test":
        print "element found"
else:
    print "element not found"

这个工作示例演示了一种使用 minidom 模块*搜索包含特定文本的元素的可能方法:

from xml.dom.minidom import parseString

def getText(nodelist):
    rc = []
    for node in nodelist:
        if node.nodeType == node.TEXT_NODE:
            rc.append(node.data)
    return ''.join(rc)


xml = """<root>
<shortcut>
<label>33060</label>
<label2>Common Shortcut</label2>
</shortcut>
<shortcut>
<label>Test</label>
</shortcut>
</root>"""
xmldoc = parseString(xml)
labels = xmldoc.getElementsByTagName("label")
for label in labels:
    text = getText(label.childNodes)
    if text == "Test":
        print("node found : " + label.toprettyxml())
        break

输出:

node found : <label>Test</label>

*) getText() 函数取自 minidom documentation 页。