python - 解析在同一元素中定义元素前缀的 XML
问题描述
我有一个带有如下元素的 XML 文件:
<wrapping_element>
<prefix:tag xmlns:prefix="url">value</prefix:tag>
</wrapping_element>
我想得到这个元素,所以我使用lxml
如下:
wrapping_element.find('prefix:tag', wrapping_element.nsmap)
但我收到以下错误:SyntaxError: prefix 'prefix' not found in prefix map
因为prefix
在到达 XML 中的此元素之前未定义。
有没有办法获取元素?
解决方案
就像评论中提到的那样,您可以用来local-name()
绕过命名空间,但是直接在调用中处理命名空间就很容易了xpath()
......
from lxml import etree
tree = etree.parse("input.xml")
wrapping_element = tree.xpath("/wrapping_element")[0]
tag = wrapping_element.xpath("x:tag", namespaces={"x": "url"})[0]
print(etree.tostring(tag, encoding="unicode"))
这将打印...
<prefix:tag xmlns:prefix="url">value</prefix:tag>
注意我使用了前缀x
。前缀可以匹配 XML 文件中的前缀,但不是必须的;只有命名空间 URI 需要完全匹配。
有关更多详细信息,请参见此处:http: //lxml.de/xpathxslt.html#namespaces-and-prefixes
推荐阅读
- sql - 如何在 MS Access 中将字段更改为 SSN 格式(###-##-####)?
- twitter-bootstrap-3 - Bootstrap 表和 Bootstrap 4 支持
- reactjs - 如何向 TablePagination ActionComponent 添加自定义道具?
- jquery - jquery 插件 - asRange / 我要竖条
- c++ - 如何在 C++ 中覆盖向量的运算符
- asp.net - 如何在web api中的get和delete方法中传递相同的参数和方法名
- html - 单击该帖子广告上的回复按钮后,如何使相应的 div 可见?
- android - 根据旧密码更新密码。SQLite 数据库安卓
- angularjs - 错误:未指定的错误。在 Angular js 中添加 localStorage.setItem 时
- goland - GoLand 文件缓存冲突