【问题标题】:Validation against DTD with lxml in python is disturbed by xmlns在 python 中使用 lxml 对 DTD 进行验证受到 xmlns 的干扰
【发布时间】:2012-10-21 15:00:51
【问题描述】:

我正在尝试使用 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 命名空间?

【问题讨论】:

    标签: python validation lxml


    【解决方案1】:

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

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

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

    【讨论】:

    • 听起来不错。我认为xmlns:foo 属性总是“自动”允许的,但我现在看到w3.org/TR/xhtml1/dtds.html 中明确提到了它。谢谢。
    • 没问题,一直想试试lxml。祝你好运
    猜你喜欢
    • 1970-01-01
    • 2014-04-18
    • 2019-02-09
    • 2014-03-08
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    相关资源
    最近更新 更多