使用Python Etree解析XML并返回指定标签,无论命名空间如何

发布于 2024-12-17 07:38:04 字数 339 浏览 0 评论 0原文

我正在处理一些 XML 数据,这些数据在每个文件的某些位置重新定义了命名空间。我试图从文档中提取特定类型的所有标签,而不管该标签驻留在 XML 中的命名空间处于活动状态。

我正在使用 findall('.//{namespace}Tag') 来查找我要查找的元素。但是永远不知道文件中任何给定点的 {namespace} 是什么,这使得我是否会返回所有请求的标签变得很困难。

有没有办法返回所有 Tag 元素,无论它们属于哪个 {namespace} ?类似于 findall('.//{wildcard}Tag') 的东西吗?

I am working with some XML data that, in some locations in each file, redefines the namespace. I'm trying to pull all tags of a specific type from the document regardless of the namespace that's active at the point where the tag resides in the XML.

I'm using findall('.//{namespace}Tag') to find the elements I'm looking for. But never knowing what the {namespace} will be at any given point in the file, makes it hit or miss whether I'll get all the requested Tags returned or not.

Is there a way to return all the Tag elements regardless of the {namespace} they fall under? Something along the lines of findall('.//{wildcard}Tag')?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

找个人就嫁了吧 2024-12-24 07:38:04

lxml的xpath函数支持local-name()!

这是一个 Python 3 示例:

import io
from lxml import etree
xmlstring = '''<root
xmlns:m="http://www.w3.org/html4/"
xmlns:n="http://www.w3.org/html5/">
<m:table>
  <m:tr>
    <m:name>Sometext</m:name>
  </m:tr>
</m:table>
<n:table>
  <n:name>Othertext</n:name>
</n:table>
</root>'''
root = etree.parse(io.StringIO(xmlstring))
names = root.xpath("//*[local-name() = 'name']")
for name in names:
    print(name.text)

您的问题之前可能已被问过:lxml etree xmlparser 命名空间问题< /a>

The xpath function of lxml supports local-name()!

Here is a Python 3 example:

import io
from lxml import etree
xmlstring = '''<root
xmlns:m="http://www.w3.org/html4/"
xmlns:n="http://www.w3.org/html5/">
<m:table>
  <m:tr>
    <m:name>Sometext</m:name>
  </m:tr>
</m:table>
<n:table>
  <n:name>Othertext</n:name>
</n:table>
</root>'''
root = etree.parse(io.StringIO(xmlstring))
names = root.xpath("//*[local-name() = 'name']")
for name in names:
    print(name.text)

Your question might have been aswered before at: lxml etree xmlparser namespace problem

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文