xml - 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 ID
为ATTLIST item id CDATA
,但目前我收到以下错误:
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
作为类型。
推荐阅读
- google-cloud-firestore - Firestore 函数和 PubSub 的问题
- google-sheets - 如何从 Google 表格中的文本中提取数字
- regex - 如何使用 perl 脚本从文件中删除选定的重复行
- arrays - 如何在函数中使用本地数组 - ANSI C?
- python - 笔记本中的 matplotlib 错误:没有名为“matplotlib”的模块
- embed - 嵌入没有 javascript 和外部资源的安全 x3d
- python - 基于对象的土地覆盖分类:将 shapefile 转换为栅格
- javascript - 如何在 SearchPanes 中为 DataTables 指定自定义选项顺序
- django - Django ManyToManyField 预取多级
- node.js - 无法从经过身份验证的 POST 请求中获取用户名