xml - ID 字段上的 DTD

标签 xml 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 ID 更改为 ATTLIST item id CDATA,但目前我收到以下错误:

enter image description here

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

最佳答案

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 作为类型即可。

关于xml - ID 字段上的 DTD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65080975/

相关文章:

python - Python中使用SAX生成XML输出时如何插入DTD DOCTYPE内容

css - 如何将 HTML 语义分配给我的 XML 元素以使其在我的网络浏览器中呈现?

xml - XSLT 插入 TXT 文件

python - 如何巧妙地重写曾经使用 XSLT 的 python 脚本?

PHP、XML - 获取子节点及其属性

xml - 'valid xml' 和 'well formed xml' 之间有什么区别吗?

java - (撒克逊 dtd)java.net.SocketException : Unexpected end of file fromserver

java - urlrewrite.xml 配置文件中的语法错误

xml - 将 xml 节点转换为 typescript 定义的类型

java - 使用XSLT解析XML时如何处理多个小数?