Specific pathing to find XML elements using minidom in Python
按照该线程,我正在使用
令我感到困惑的是为什么它的
XML:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <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> |
Python代码:
1 2 3 4 5 | xmldoc = minidom.parse('sampleXML.xml') items = xmldoc.getElementsByTagName('item') for item in items: print item.attributes['name'].value |
印刷品:
1 2 3 4 5 6 7 8 | item1 item2 item3 item4 item5 item6 item7 item8 |
令我困扰的是它隐式地在
如何使它遵循明确的路径,并且仅提取两个类别之一下的项目? 例如。 在
1 2 3 4 | item5 item6 item7 item8 |
如果要从特定类别中获取商品,可以先获取父元素。
例如:
码:
1 2 3 4 5 6 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 |
输出:
1 2 3 4 | item5 item6 item7 item8 |
这是getElementsByTagName的声明行为
Search for all descendants (direct children, children’s children, etc.) with a particular element type name.
有些人在上面写了一个"过滤器",看到这个答案
在我看来minidom太简单了,请考虑使用lxml xpath:
1 | tree.xpath('//secondSetOfItems/item/@name') |
或BeautifulSoup findAll:
1 | data.secondSetOfItems.item.findAll('name') |