DTD验证报错:元素类型"Item"内容必须匹配的技术问询
排查XML与DTD中Item元素内容不匹配的问题
首先,这个错误的核心是你的XML文档里第35行的<Item>元素结构不符合DTD定义的规则。我们先明确DTD中Item的要求:
<!ELEMENT Item (ItemNumber, TypesOfCar, Warranty?, Discount?, Description, CarDetails+)>
这个定义对Item的子元素有严格的顺序和数量要求,具体规则如下:
- 必须按顺序包含以下元素:
ItemNumber:必须出现恰好一次TypesOfCar:必须出现恰好一次Warranty:可选(0次或1次)Discount:可选(0次或1次)Description:必须出现恰好一次CarDetails:必须出现至少一次(+表示1次或多次)
常见的错误原因及检查方向
你可以对照以下几点去检查第35行的<Item>元素:
- 子元素顺序错误:比如把
Discount放在Warranty前面,或者Description出现在Discount之前,又或者CarDetails没有放在最后一位 - 缺少必填元素:比如遗漏了
ItemNumber、TypesOfCar、Description中的任意一个,或者CarDetails一次都没写 - 重复了限次元素:比如写了两个
ItemNumber,或者Warranty出现了两次(DTD里?只允许0或1次) - 多了未定义元素:在
<Item>里加入了DTD没声明的子元素
快速检查步骤
- 定位到XML文档第35行的
<Item>元素(注意行号可能包含空白行,要准确找到对应的元素块) - 逐行核对子元素的顺序和数量,确保完全匹配DTD的要求
- 确认
CarDetails至少存在一个实例,没有被遗漏
举个错误示例,比如这样的<Item>就会触发你遇到的错误:
<Item> <TypesOfCar category="Sedan">Toyota Camry</TypesOfCar> <ItemNumber>CR-001</ItemNumber> <!-- 顺序错误,应该先写ItemNumber --> <Description>Used 2020 model</Description> <!-- 缺少CarDetails元素 --> </Item>
内容的提问来源于stack exchange,提问作者anish bhattrai
相关产品推荐
相关产品推荐

