0

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"
4

1 に答える 1

1

minidomこの動作例は、 module*を使用して特定のテキストを含む要素を検索する 1 つの可能な方法を示しています。

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

于 2015-07-07T09:54:27.460 に答える