Python XML 如何抓取节点及其 Xpath 中的所有元素?

问题描述 投票:0回答:0

我有一个 XML,我想获取每个节点及其 Xpath 中的所有元素

例如 XML 看起来像这样:

<ns:fruits>
 <ns:fruit_name ns:expiration_date='2012-01-01'>
  <ns:name> Apple</ns:name>
 </ns:fruit_name>
</ns:fruits>

我希望能够将 2 列输出到 csv 中:

fruits,/ns:fruits
fruit_name, /ns:fruits/ns:fruit_name
expiration_date, /ns:fruits/ns:fruit_name
name, /ns:fruits/ns:fruit_name/ns:name

我目前有一个使用 lxml 的基本代码,但如果节点有它,它不会获得次要元素,它只采用第一个是 fruit_name,但我也想用它的 xpath 输出到期日期。

from lxml import etree 
root = etree.parse('Sample3.xml')


ns = {'ns': 'namespace'}

rows = []

for e in root.iter():
    path = root.getelementpath(e)
    root_path = '/' + root.getroot().tag
    if path == '.':
        path = root_path
    else:
        path = root_path + '/' + path
    for ns_key in ns:
        path = path.replace('{' + ns[ns_key] + '}', ns_key + ':')
    #print(path)
    r = root.xpath(path, namespaces=ns)
    r = (F"{r[0].tag[r[0].tag.find('}')+1:]}")
    if r == "ID":
        rows.insert(-1,(r,path))
    else:
        rows.append((r, path))
python xml xpath lxml
© www.soinside.com 2019 - 2024. All rights reserved.