我有一个 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))