Python XPath 的命名空间处理
XPath 是一种用于在 XML 文档中定位节点的语言。但是当我们使用 XPath 查询带有命名空间的 XML 文档时,需要注意命名空间的处理。下面是 Python 中 XPath 处理命名空间的方法以及代码演示。
首先,我们需要导入 etree
模块:
from lxml import etree
下面是一个样例 XML 文档:
<?xml version="1.0" encoding="UTF-8"?> <pidan:book xmlns:pidan="https://pidancode.com"> <pidan:title>Python 编程入门</pidan:title> <pidan:author>皮蛋编程</pidan:author> </pidan:book>
在使用 XPath 查询时,我们需要先声明命名空间:
ns = {"pidan": "https://pidancode.com"}
这里我们使用了字典 ns
,其中 key 是命名空间的前缀,value 是命名空间的 URI。
接着,我们可以使用如下方式进行 XPath 查询:
root.xpath("//pidan:title/text()", namespaces=ns)
这条 XPath 查询语句可以查询出 <pidan:title>
的文本内容。
完整的代码演示如下:
from lxml import etree xml_str = '''<?xml version="1.0" encoding="UTF-8"?> <pidan:book xmlns:pidan="https://pidancode.com"> <pidan:title>Python 编程入门</pidan:title> <pidan:author>皮蛋编程</pidan:author> </pidan:book>''' root = etree.fromstring(xml_str) ns = {"pidan": "https://pidancode.com"} title = root.xpath("//pidan:title/text()", namespaces=ns)[0] print(title) # 输出:Python 编程入门
在这个样例中,我们使用 XML 字符串 xml_str
初始化了一个 Element
对象 root
,然后声明了命名空间 ns
,最后使用 XPath 查询得到了 <pidan:title>
的文本内容并打印输出。
需要注意的是,命名空间的解析顺序是从最接近节点的命名空间开始解析,因此 XPath 中的命名空间前缀要和 XML 文档中的一致。
相关文章