小编gri*_*ron的帖子

使用 xml.etree.ElementTree 捕获所有 XML 元素路径

使用 python import lxml 我可以递归地打印每个元素的路径列表:

from lxml import etree
root = etree.parse(xml_file)
for e in root.iter():
    path = root.getelementpath(e)
    print(path)
Run Code Online (Sandbox Code Playgroud)

结果:

TreatmentEpisodes
TreatmentEpisodes/TreatmentEpisode
TreatmentEpisodes/TreatmentEpisode/SourceRecordIdentifier
TreatmentEpisodes/TreatmentEpisode/FederalTaxIdentifier
TreatmentEpisodes/TreatmentEpisode/ClientSourceRecordIdentifier
etc.
Run Code Online (Sandbox Code Playgroud)

注意:我正在使用此 XSD: https://www.myflfamilies.com/service-programs/samh/155-2/155-2-v14/schemas/TreatmentEpisodeDataset.xsd

我想使用 import xml.etree.ElementTree as ET 做同样的事情 ...但是 ElementTree 似乎没有与 lxml getelementpath() 等效的函数。

我已阅读文档。我已经用谷歌搜索了好几天了。我尝试过 XPath。我猜测使用 iter() 并尝试了“getpath()”、“Element.getpath()”等,希望发现一个未记录的功能。失败。

也许我遇到了“用户错误”的极端情况,如果这是重复的,请原谅我。

我想我在这里找到了答案:使用 ElementTree getpath() 动态获取 Xpath但 XPathEvaluator 似乎只在“已知”元素上运行 - 它没有“给我一切”的选项。

这是我尝试过的:

import xml.etree.ElementTree as ET
tree = etree.parse(xml_file)
for entry in tree.xpath('//TreatmentEpisode'):
    print(entry)
Run Code Online (Sandbox Code Playgroud)

结果:

<Element TreatmentEpisode at 0xffff8f8c8a00>
Run Code Online (Sandbox Code Playgroud)

我所希望的:

TreatmentEpisodes/TreatmentEpisode
Run Code Online (Sandbox Code Playgroud)

...但是,即使我收到了我所希望的,我仍然不确定如何获得每个 …

python xml elementtree

5
推荐指数
1
解决办法
3987
查看次数

标签 统计

elementtree ×1

python ×1

xml ×1