使用 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)
...但是,即使我收到了我所希望的,我仍然不确定如何获得每个 …