使用Python中的minidom查找XML元素的特定路径

amp*_*ent 2 python xml dom

根据这个线程,我xml.dom.minidom用来做一些非常基本的XML遍历,只读.

让我感到困惑的是,为什么它getElementsByTagName会在几个层次结构级别找到节点,而不会明确地为它们提供精确的路径.

XML:

<data>
    <items>
        <item name="item1"></item>
        <item name="item2"></item>
        <item name="item3"></item>
        <item name="item4"></item>
    </items>
    <secondSetOfItems>
        <item name="item5"></item>
        <item name="item6"></item>
        <item name="item7"></item>
        <item name="item8"></item>
    </secondSetOfItems>
</data>
Run Code Online (Sandbox Code Playgroud)

Python代码:

xmldoc = minidom.parse('sampleXML.xml')
items = xmldoc.getElementsByTagName('item') 

for item in items:
    print item.attributes['name'].value
Run Code Online (Sandbox Code Playgroud)

打印:

item1
item2
item3
item4
item5
item6
item7
item8
Run Code Online (Sandbox Code Playgroud)

让我困扰的是,它含蓄地发现命名的标记item下都data->items还有data->secondSetOfItems.

如何使其遵循显式路径并仅提取两个类别之一的项目?例如data->secondSetOfItems:

item5
item6
item7
item8
Run Code Online (Sandbox Code Playgroud)

小智 7

如果要从特定类别中获取项目,可以先抓取父元素.

例如:

代码:

xmldoc = minidom.parse('sampleXML.xml')
#Grab the first occurence of the "secondSetOfItems" element
second_items = xmldoc.getElementsByTagName("secondSetOfItems")[0]
item_list = second_items.getElementsByTagName("item")

for item in item_list:
    print item.attributes['name'].value
Run Code Online (Sandbox Code Playgroud)

输出:

item5
item6
item7
item8
Run Code Online (Sandbox Code Playgroud)

  • nvrmnd,它应该是`item.childNodes [0] .nodeValue` (2认同)