libxml2 的 DTD 验证错误

DTD validation error with libxml2

我尝试用 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。通过此设置,我收到错误消息:

element vent: validity error : Value "1" for attribute id of vent is not among the enumerated set

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

您的属性 id 被定义为类型 ID。这意味着它必须是一个有效的 XML 名称,因此它的第一个字符不能是数字而是字母。可以找到描述 here or even better in the W3C documentation itself: ID and Names(从 BLUEPIXY 的评论中复制)