python-3.x - 使用 Python Etree 解析 XML 并返回指定的标签,而不管命名空间

标签 python-3.x xml-parsing xml-namespaces elementtree

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

我正在使用 findall('.//{namespace}Tag')找到我正在寻找的元素。但永远不知道是什么{namespace}将在文件中的任何给定点,无论我是否会返回所有请求的标签,都会命中或错过。

有没有办法不管 {namespace} 返回所有的 Tag 元素他们属于?类似 findall('.//{wildcard}Tag') 的东西?

最佳答案

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 namespace problem 中得到解答

关于python-3.x - 使用 Python Etree 解析 XML 并返回指定的标签,而不管命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8199732/

相关文章:

python - 在 Ubuntu 上安装 Python Nmap 的问题

python - 动态分配模块名称作为别名

java - 正在添加空默认 XML 命名空间 xmlns =""属性?

PHP 用 DOM 解析(无结果)

html - XMLNS 和搜索引擎的语义理解

java - JAXB:解码期间未继承命名空间注释 - JDK 1.8_102 中的回归?

python - 模块未找到错误: No module named 'mysite' when try to call django-admin

python - 来自 Dataframe 的条形图

c# - 以标准方式访问没有值(value)的短信 Web 服务中的子 XML 值

Java XPath : Queries with default namespace xmlns