使用 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 页。
对于 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 页。