如何使用lxml和XPATH检索单个查询中的所有子节点

2024-05-14 07:24:41 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的xml数据

<location>
   <city>
      <name> New York</name>
      <type>non-capital</type>
   </city>

   <city>
        <name> London</name>
        <type>capital</type>
   </city>
</location>

使用lxml&python

from lxml import etree as ET

parser = ET.XMLParser(recover=True)

tree = ET.fromstring(xml_data,parser)
print(tree.xpath('//city//name/text() | //city//type/text()'))

上面的代码可以工作,但是我希望嵌套数组描述为[['New York','non-capital'],['London','capital']]

要获得上述结果,准确的xpath查询/查询/循环组合是什么?


Tags: nametreeparsercitynewtypelocationxml
2条回答

列表理解解决方案:

xml_data='''<location>
   <city>
      <name> New York</name>
      <type>non-capital</type>
   </city>
   <city>
        <name> London</name>
        <type>capital</type>
   </city>
</location>'''

from lxml import etree as ET

parser = ET.XMLParser(recover=True)

tree = ET.fromstring(xml_data,parser)
print(tree.xpath('//city'))


cities = [[c.text for c in n if c.tail] for n in tree.xpath('//city')]

结果:

[[' New York', 'non-capital'], [' London', 'capital']]

这是一种可能的方式:

.......
result = []
for city in tree.xpath('//city'):
    result.append([city.find('name').text, city.find('type').text])

print(result)
# output :
#[[' New York', 'non-capital'], [' London', 'capital']]

相关问题 更多 >

    热门问题