首页 > 解决方案 > ID 字段上的 DTD

问题描述

我有以下基本 XML 和 DTD:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE items [
    <!ELEMENT items (item*)>
    <!ELEMENT item (name, age*)>
    <!ATTLIST item id ID #IMPLIED>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
]>
<items>
    <item id="1">
        <name>Tom</name>
        <age>20</age>
    </item>
    <item id="2">
        <name>mike</name>
        <age>20</age>
    </item>
    <item id="3">
        <name>erik</name>
        <age>20</age>
    </item>
</items>

这验证我是否更改ATTLIST item id IDATTLIST item id CDATA,但目前我收到以下错误:

在此处输入图像描述

ID 字段有什么问题?这应该如何正确使用?

标签: xmldtd

解决方案


ID必须匹配name约束,所以需要以“NameStartChar”开头,即不是数字。例如,这将起作用:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE items [
    <!ELEMENT items (item*)>
    <!ELEMENT item (name, gender, age*)>
    <!ATTLIST item id ID #IMPLIED>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT gender (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
]>
<items>
    <item id="a1">
        <name>Tom</name>
        <gender>M</gender>
        <age>20</age>
    </item>
    <item id="a2">
        <name>Sarah</name>
        <gender>F</gender>
        <age>20</age>
    </item>
</items>

虽然如果您需要,例如,一个自动递增的 ID,只需使用CDATA作为类型。


推荐阅读