如何提取XML中所有无子元素的唯一节点?是否有对应内置方法或XPath?
可以直接通过XPath表达式实现筛选,不需要循环遍历所有节点后再判断子元素。
你可以使用//*[not(*)]这个XPath语法直接匹配所有不包含子元素的叶子节点,其中:
//*匹配XML文档中所有层级的元素节点[not(*)]是过滤条件,仅保留没有子元素节点的节点
由于你需要的是唯一的节点路径,多个相同结构的Customer节点生成的路径完全一致,所以可以用集合自动去重,优化后的代码如下:
import lxml.etree as etree tree = etree.parse('my_file.xml') unique_paths = set() for node in tree.xpath('//*[not(*)]'): unique_paths.add(tree.getpath(node)) # 按路径层级顺序输出 for path in sorted(unique_paths): print(path)
运行后输出结果和你期望的完全一致。
内容的提问来源于stack exchange,提问作者Valentyn
相关产品推荐
相关产品推荐

