使用python import lxml,我能够递归地打印每个元素的路径列表:
from lxml import etree
root = etree.parse(xml_file)
for e in root.iter():
path = root.getelementpath(e)
print(path)
结果:
TreatmentEpisodes
TreatmentEpisodes/TreatmentEpisode
TreatmentEpisodes/TreatmentEpisode/SourceRecordIdentifier
TreatmentEpisodes/TreatmentEpisode/FederalTaxIdentifier
TreatmentEpisodes/TreatmentEpisode/ClientSourceRecordIdentifier
etc.
注意:我正在使用这个XSD:https://www.myflfamilies.com/service-programs/samh/155-2/155-2-v14/schemas/TreatmentEpisodeDataset.xsd
我想使用 将xml.etree.ElementTree作为ET导入 …但ElementTree似乎没有与lxml getelementpath()等效的函数
我看过文件了。 我在谷歌上搜索了好几天。 我已经尝试过XPath。 我猜是使用iter()并尝试了“getpath()”、“Element.getpath()”等,希望发现一个未记录的特性。失败
也许我遇到了一个“用户错误”的极端情况,如果这是重复的,请原谅我
我想我在这里找到了答案:Get Xpath dynamically using ElementTree getpath()但是XPathEvaluator似乎只对“已知”元素进行操作——它没有“给我一切”的选项
以下是我尝试过的:
import xml.etree.ElementTree as ET
tree = etree.parse(xml_file)
for entry in tree.xpath('//TreatmentEpisode'):
print(entry)
结果:
<Element TreatmentEpisode at 0xffff8f8c8a00>
我所希望的是:
TreatmentEpisodes/TreatmentEpisode
…然而,即使我收到了我所希望的,我仍然不确定如何获得每个元素的完整路径。据我所知,XPath文档只对“已知”元素名进行操作。即tree.XPath()似乎要求事先知道元素名
开始于:
解决问题的一个有趣方法是使用iterparse-An 迭代解析器包含在元素树中
它能够为每个分析的元素报告例如每个开始和结束事件。 有关详细信息,请在Web上搜索iterparse的文档/示例
其想法是:
您甚至可以将此代码包装到一个生成器函数中:
现在,当您运行时:
您将获得所有元素的完整路径的打印输出 在源文件中,类似于:
相关问题 更多 >
编程相关推荐