解析xml时如何从根获取xpath到python中的特定元素 [英] How to get xpath from root to particular element in python while parsing xml

查看:41
本文介绍了解析xml时如何从根获取xpath到python中的特定元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想列出 xml 中所有元素相对于它们的根的路径.例如

I want to list all the elements path in xml with respect to their root. for example

<A>
   <B>
     <C>Name</C>
     <D>Name</D>
   </B>
</A>

所以我想将它们列为:-

So i want to list them as :-

A/B/C
A/B/D

我能够使用 python 的元素"对象解析 xml,但无法从中提取 xpath.有什么帮助吗?

I am able to parse xml using "Element" Object of python but not able to extract xpath from it. Any help?

推荐答案

可以构造解析树的父映射,然后使用它来构造所需的 XPath:

One can construct a parent map of the parsed tree and then use it to construct a needed XPath:

import xml.etree.ElementTree as parser

def get_parent_map(root):
    return {c:p for p in root.iter() for c in p}

def extract_text_info(root, original_root):
    parent_map = get_parent_map(original_root)

    for child in root:
        if child.text is not None and len(child.text.strip()) > 0:
            c = child
            arr = []
            while c != original_root:
                arr.append(c.tag)
                c = parent_map[c]
            arr.append(original_root.tag)

            print('/'.join(arr[::-1]))
            print(child.text)

        extract_text_info(child, original_root)

然后我们有

xml = """<A>
       <B>
         <C>Name</C>
         <D>Name</D>
       </B>
     </A> """

root = parser.fromstring(xml)
extract_text_info(root, root)

> A/B/C
> Name
> A/B/D
> Name

这篇关于解析xml时如何从根获取xpath到python中的特定元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆