gpt4 book ai didi

python - lxml忽略具有未定义命名空间前缀的元素

转载 作者:行者123 更新时间:2023-12-04 17:04:41 26 4
gpt4 key购买 nike

我有一些简单的代码单步执行一个大型 XML 文件(包含在 DTD 中定义的实体):

from lxml import etree
tree = etree.parse(
file('t.xml', 'r'), etree.XMLParser(dtd_validation=False, load_dtd=True))
for e in tree.iter('bla'):
process(e) # whatever to be done with it

这适用于纯 XML 输入。

不幸的是 iter生成器不会为带有冒号的标签生成任何内容(命名空间前缀)。命名空间没有在任何地方定义,实际上我并不关心它。我只想遍历元素。

是否有捷径可寻?

最佳答案

好吧,这可能并不完全令人满意,但这是我发现的:

>>> root = tree.getroot()
>>> root.attrib
{'{http://www.w3.org/2001/XMLSchema-instance}schemaLocation': 'http://xmlns.oracle.com/weblogic/security/xacml'}
>>> root.nsmap
{None: 'http://xmlns.oracle.com/weblogic/domain', 'wls': 'http://xmlns.oracle.com/weblogic/security/wls', 'sec': 'http://xmlns.oracle.com/weblogic/security', 'xsi': 'http://www.w3.org/2001/XMLSchema-instance'}
>>>

对于像这样的标签:
<domain xmlns="http://xmlns.oracle.com/weblogic/domain"
xmlns:sec="http://xmlns.oracle.com/weblogic/security"
xmlns:wls="http://xmlns.oracle.com/weblogic/security/wls"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/weblogic/security/xacml">

但这应该能让你得到一切:
  • “标准”属性通过 attrib
  • “命名空间”通过 nsmap
  • 关于python - lxml忽略具有未定义命名空间前缀的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12142739/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com