简体   繁体   English

xmlns干扰了在python中使用lxml对DTD进行验证

[英]Validation against DTD with lxml in python is disturbed by xmlns

I'm trying to validate an XML document in Python using lxml. 我正在尝试使用lxml在Python中验证XML文档。

DTD validation will treat the presence of xmlns namespaces as errors. DTD验证会将xmlns名称空间的存在视为错误。

This example script 这个示例脚本

from lxml import etree
from StringIO import StringIO

dtd = etree.DTD(StringIO("<!ELEMENT a EMPTY>"))
root = etree.XML("<a></a>")
print(dtd.validate(root))
root = etree.XML('<a xmlns:sru="http://www.loc.gov/zing/srw/"></a>')
print(dtd.validate(root))
print dtd.error_log

yields 产量

True
False
<string>:1:0:ERROR:VALID:DTD_UNKNOWN_ATTRIBUTE: No declaration for attribute xmlns:sru of element a

How can I have lxml validate my document against a DTD without complaining about xml namespace? 如何让lxml在不抱怨xml名称空间的情况下针对DTD验证我的文档?

You have to define the xmlns:sru attribute for the a element in your DTD. 您必须为DTD中的a元素定义xmlns:sru属性。 It currently doesn't have one. 它目前没有。

<!ELEMENT a EMPTY>
<!ATTLIST a xmlns:sru CDATA #IMPLIED>

This defines an optional CDATA attribute for xmlns:sru on element a. 这为元素a上的xmlns:sru定义了可选的CDATA属性。

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

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