Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中使用minidom查找XML元素的特定路径_Python_Xml_Dom - Fatal编程技术网

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

在Python中使用minidom查找XML元素的特定路径,python,xml,dom,Python,Xml,Dom,根据,我正在使用做一些非常基本的XML遍历,只读 让我困惑的是,为什么它的getElementsByTagName在没有明确提供确切路径的情况下查找多个层次结构级别的节点 XML: 印刷品: item1 item2 item3 item4 item5 item6 item7 item8 困扰我的是,它隐式地在data->items以及data->secondSetOfItems下找到名为item的标记 如何使其遵循显式路径并仅提取两个类别之一下的项目?例如,在data->secondSetOf

根据,我正在使用做一些非常基本的XML遍历,只读

让我困惑的是,为什么它的
getElementsByTagName
在没有明确提供确切路径的情况下查找多个层次结构级别的节点

XML:

印刷品:

item1
item2
item3
item4
item5
item6
item7
item8
困扰我的是,它隐式地在
data->items
以及
data->secondSetOfItems
下找到名为
item
的标记

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

item5
item6
item7
item8

这是声明的行为

搜索具有特定元素类型名称的所有子代(直接子代、子代等)

有些人在上面写了一个“过滤器”,参见

在我看来MIDIOM太简单了,考虑使用LXXXPath:

tree.xpath('//secondSetOfItems/item/@name')
或芬德尔:


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

例如:

代码

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
item5
item6
item7
item8
输出

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
item5
item6
item7
item8

非常感谢。还有一个问题:假设我在item标签
XYZ
中有一个值。我如何阅读XYZ?我尝试了
item.nodeValue
没有可用的VRMND,它应该是
item.childNodes[0]。nodeValue
item5
item6
item7
item8