libxml2的DTD验证错误

时间:2015-06-29 15:14:04

标签: c libxml2 dtd

我尝试用dtd验证一些xml数据。为此,我必须使用libxml2。 生成的xml数据如下所示:

    <?xml version="1.0"?>
        <root>
            <vent id="1">
                <usb_device_id>1</usb_device_id>
                <usb_device_channel>2</usb_device_channel>
                <vent_box_id>3</vent_box_id>
                <vent_box_channel>4</vent_box_channel>
            </vent>
       </root>

我的dtd看起来像这样:

    <!ELEMENT root (vent) >
    <!ELEMENT vent (usb_device_id, usb_channel, vent_box_id, vent_box_channel) >
    <!ATTLIST vent id (ID) #REQUIRED >
    <!ELEMENT usb_device_id (CDATA) >
    <!ELEMENT usb_channel (CDATA) >
    <!ELEMENT vent_box_id (CDATA) >

我在解析的树上使用http://xmlsoft.org/html/libxml-valid.html#xmlValidateDtd。通过此设置,我收到错误消息:

元素发布:有效性错误:发布的属性id的值“1”不在枚举集中

我哪里错了?提前谢谢......

1 个答案:

答案 0 :(得分:2)

您的属性id定义为类型ID。这意味着它必须是一个有效的XML名称,因此它的第一个字符不能是数字而是字母。在W3C文档中可以找到here甚至更好的描述:IDNames(复制形式BLUEPIXY&#39;)