0

我正在尝试使用 lxml 在 Python 中验证 XML 文档。

DTD 验证会将 xmlns 命名空间的存在视为错误。

此示例脚本

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

产量

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

如何让 lxml 根据 DTD 验证我的文档而不抱怨 xml 命名空间?

4

1 回答 1

2

您必须为 DTD 中的 a 元素定义 xmlns:sru 属性。它目前没有。

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

这为元素 a 上的 xmlns:sru 定义了一个可选的 CDATA 属性。

于 2012-10-21T15:17:25.643 回答