在 Python 中使用 ElementTree 的'find”和'findall”方法时如何忽略 XML 命名空间?

DDD
发布: 2024-10-26 11:56:03
原创
954 人浏览过

How to Ignore XML Namespaces when Using ElementTree's

在 ElementTree 的“find”和“findall”方法中忽略 XML 命名空间

使用 ElementTree 模块解析和定位 XML 文档中的元素时,命名空间会带来复杂性。下面介绍了如何在 Python 中使用“find”和“findall”方法时忽略命名空间。

当 XML 文档包含命名空间时,会导致 ElementTree 模块在搜索标签时考虑它们,就会出现问题。这可能会导致意外结果,如问题中提供的示例所示:

<code class="python">el1 = tree.findall("DEAL_LEVEL/PAID_OFF")  # Return None
el2 = tree.findall("{http://www.test.com}DEAL_LEVEL/{http://www.test.com}PAID_OFF")  # Return element</code>
登录后复制

要忽略名称空间,解决方案是在使用“find”或“之前修改已解析的 XML 文档中的标签” findall”方法。这可以使用 ElementTree 的 iterparse() 方法来实现:

<code class="python">import io
from xml.etree import ElementTree as ET

# Parse the XML document
it = ET.iterparse(StringIO(xml))

# Iterate over each element and strip the namespace if present
for _, el in it:
    _, _, el.tag = el.tag.rpartition("}")  # strip ns

# Get the modified root element
root = it.root

# Now, you can search for elements without namespaces
el3 = root.findall("DEAL_LEVEL/PAID_OFF")  # Return matching elements</code>
登录后复制

此解决方案修改解析文档中的标签,从而更轻松地定位元素,而无需手动为每个标签指定命名空间前缀。

以上是在 Python 中使用 ElementTree 的'find”和'findall”方法时如何忽略 XML 命名空间?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!