嘿伙计们我有一个外部的XML DTD代码但是当我尝试验证它时,我似乎得到了一个错误。我的代码如下:
<!DOCTYPE catalog [
<!ELEMENT catalog (book)+>
<!ELEMENT book (title, authors, year_published, ISBN, number_of_pages, price) >
<!ELEMENT title (#PCDATA)>
<!ELEMENT authors (author)>
<!ELEMENT author (first_name, last_name, gender)>
<!ELEMENT first_name (#PCDATA)>
<!ELEMENT last_name (#PCDATA)>
<!ELEMENT gender (#PCDATA)>
<!ELEMENT year_pusblished (#PCDATA)>
<!ELEMENT ISBN (#PCDATA)>
<!ELEMENT number_of_pages (#PCDATA)>
<!ELEMENT price (discount)>
<!ATTLIST price discount (yes|no) "no">]>
我知道一切都是正确的但是当我验证它时会出现错误消息:
“文档类型声明中包含或指向的标记声明必须格式正确。第3行第4列”
我已经检查了一切,但我似乎无法让它工作。你们能帮忙吗?
答案 0 :(得分:0)
您似乎使用了http://www.validome.org/xml/validate/工具,它会在您的问题中发出确切的错误消息,并且在其他方面也没有特别的帮助。通常,免费的XML验证器的质量是......变化的。一个更好的工具是http://xmlvalidator.new-studio.org。
如果您附加以下简单的XML元素并使用更好的工具进行验证,则可以更好地了解问题:
<catalog>
<book>
<title></title>
<authors>
<author>
<first_name></first_name>
<last_name></last_name>
<gender></gender>
</author>
</authors>
<year_published></year_published>
<ISBN></ISBN>
<number_of_pages></number_of_pages>
<price></price>
</book>
</catalog>
您收到以下错误消息:
第25行第17列:必须声明元素类型“year_published”。
第28行第16列:元素类型“价格”的内容不完整,必须与“(折扣)”匹配。
第一个错误很简单:只需在元素声明中修复拼写year_pusblished
(删除第一个s
)。
第二个不太明显,但很简单:您已将price
元素声明为(discount)
作为内容模型。这意味着price
元素必须包含一个discount
元素,而这实际上没有任何意义(尽管可能,正式来说,但是你需要声明元素{ {1}})。您可能希望仅允许字符数据作为内容(折扣的适用性在discount
属性中指定):
discount