繁体   English   中英

奇怪的lxml行为

[英]Strange lxml behavior

我手动创建xml,然后尝试使用xsd方案对其进行验证。 最初不会通过验证,但是如果我将xml转换为字符串然后返回-那么新的xml将通过验证。

from lxml import etree

xsd = etree.fromstring("""
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="some_namespace">
    <element name="el"></element>
</schema>""")
schema = etree.XMLSchema(xsd)

xml1 = etree.Element('el', nsmap={None: "some_namespace"})
xml2 = etree.fromstring(etree.tostring(xml1))

schema.assertValid(xml2)  # this passes
schema.assertValid(xml1)  # this fails

我看到xml1和xml2具有不同的标签:

print xml1.tag  # --> el
print xml2.tag  # --> {some_namespace}el

但是,为什么xml1和xml2有如此不同? 看起来它们应该是相同的。

在这里创建一个el元素(没有名称空间):

xml1 = etree.Element('el', nsmap={None: "some_namespace"})

使用nsmap参数不会将元素绑定到名称空间。 它只是提供了序列化的映射。

当执行etree.tostring(xml1) ,序列化行为“开始”。 解析了序列化结果后, xml2{some_namespace}el元素,而不是el

要使其工作,请将行更改为:

xml1 = etree.Element('{some_namespace}el', nsmap={None: "some_namespace"})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM