文档类型声明包含或指向的标记声明必须格式正确
The markup declarations contained or pointed to by the document type declaration must be well-formed
我有这个 xml 文档:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE catalog SYSTEM "plantdtd.dtd">
<catalog>
<title>Flowers of the week</title>
<plant id="A1">
<name>Aloe vera</name>
<climate>tropical</climate>
<height>60-100cm</height>
<usage>medicinal</usage>
<image>aloevera.jpg</image>
</plant>
<plant id="A2">
<name>Orchidaceae</name>
<height>8-12in</height>
<usage>medicinal</usage>
<usage>decoration</usage>
<image>Orchidaceae.jpg</image>
</plant>
</catalog>
我写了这样一个 DTD:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE catalog SYSTEM "file:/home/p10398/plantdtd.dtd"
[
<!ELEMENT catalog(title,plant+)>
<!ELEMENT title(#PCDATA)>
<!ELEMENT plant(name,climate,height,usage,image)+>
<!ELEMENT name(#PCDATA)>
<!ELEMENT climate(#PCDATA)>
<!ELEMENT height(#PCDATA)>
<!ELEMENT usage(#PCDATA)>
<!ELEMENT image(#PCDATA)>
]>
我收到此错误:
致命错误:
Public ID:空
系统 ID:文件:/home/p14524/plantdtd.dtd
行号:4
列号:3
消息:文档类型包含或指向的标记声明
声明必须格式正确。
有人可以解释我为什么会收到这个错误吗?或正确的 DTD?
编辑和更新:
啊!谢谢丹尼尔。
现在之前的错误消失了。
我的新 DTD 是
<!ELEMENT catalog (title,plant+)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT plant (name,climate,height,usage,image)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT climate (#PCDATA)>
<!ELEMENT height (#PCDATA)>
<!ELEMENT usage (#PCDATA)>
<!ELEMENT image (#PCDATA)>
<!ATTLIST plant id ID #REQUIRED>
我收到这个新错误:
行号:18
列号:9
消息:元素类型 "plant" 的内容必须匹配“(name,climate,height,usage,image)”。
您需要从 DTD 中删除 DOCTYPE
。声明中的元素名称后还应该有空格。
新 DTD
<!ELEMENT catalog (title,plant+)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT plant (name,climate,height,usage,image)+>
<!ELEMENT name (#PCDATA)>
<!ELEMENT climate (#PCDATA)>
<!ELEMENT height (#PCDATA)>
<!ELEMENT usage (#PCDATA)>
<!ELEMENT image (#PCDATA)>
既然 DTD 有效,您将在验证 XML 时看到一些错误。
首先是需要声明plant
元素的id
属性。我建议 <!ATTLIST plant id ID #REQUIRED>
。
第二个是第二个plant
少了climate
。我不确定那是 XML 错误还是 DTD 错误。 plant
的元素声明没有多大意义,因为它是按该顺序排列的那 5 个元素一次或多次。如果您在这方面需要帮助,请描述 plant
应包含的内容,我可以帮助您编写正确的声明。
“文档类型声明包含或指向的标记声明必须格式正确”错误
在我的例子中,我使用了代理,所以我猜这是导致问题的原因
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
所以我把它改成了 https
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
我有这个 xml 文档:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE catalog SYSTEM "plantdtd.dtd">
<catalog>
<title>Flowers of the week</title>
<plant id="A1">
<name>Aloe vera</name>
<climate>tropical</climate>
<height>60-100cm</height>
<usage>medicinal</usage>
<image>aloevera.jpg</image>
</plant>
<plant id="A2">
<name>Orchidaceae</name>
<height>8-12in</height>
<usage>medicinal</usage>
<usage>decoration</usage>
<image>Orchidaceae.jpg</image>
</plant>
</catalog>
我写了这样一个 DTD:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE catalog SYSTEM "file:/home/p10398/plantdtd.dtd"
[
<!ELEMENT catalog(title,plant+)>
<!ELEMENT title(#PCDATA)>
<!ELEMENT plant(name,climate,height,usage,image)+>
<!ELEMENT name(#PCDATA)>
<!ELEMENT climate(#PCDATA)>
<!ELEMENT height(#PCDATA)>
<!ELEMENT usage(#PCDATA)>
<!ELEMENT image(#PCDATA)>
]>
我收到此错误:
致命错误: Public ID:空 系统 ID:文件:/home/p14524/plantdtd.dtd 行号:4 列号:3 消息:文档类型包含或指向的标记声明 声明必须格式正确。
有人可以解释我为什么会收到这个错误吗?或正确的 DTD?
编辑和更新: 啊!谢谢丹尼尔。 现在之前的错误消失了。 我的新 DTD 是
<!ELEMENT catalog (title,plant+)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT plant (name,climate,height,usage,image)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT climate (#PCDATA)>
<!ELEMENT height (#PCDATA)>
<!ELEMENT usage (#PCDATA)>
<!ELEMENT image (#PCDATA)>
<!ATTLIST plant id ID #REQUIRED>
我收到这个新错误:
行号:18 列号:9 消息:元素类型 "plant" 的内容必须匹配“(name,climate,height,usage,image)”。
您需要从 DTD 中删除 DOCTYPE
。声明中的元素名称后还应该有空格。
新 DTD
<!ELEMENT catalog (title,plant+)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT plant (name,climate,height,usage,image)+>
<!ELEMENT name (#PCDATA)>
<!ELEMENT climate (#PCDATA)>
<!ELEMENT height (#PCDATA)>
<!ELEMENT usage (#PCDATA)>
<!ELEMENT image (#PCDATA)>
既然 DTD 有效,您将在验证 XML 时看到一些错误。
首先是需要声明plant
元素的id
属性。我建议 <!ATTLIST plant id ID #REQUIRED>
。
第二个是第二个plant
少了climate
。我不确定那是 XML 错误还是 DTD 错误。 plant
的元素声明没有多大意义,因为它是按该顺序排列的那 5 个元素一次或多次。如果您在这方面需要帮助,请描述 plant
应包含的内容,我可以帮助您编写正确的声明。
“文档类型声明包含或指向的标记声明必须格式正确”错误
在我的例子中,我使用了代理,所以我猜这是导致问题的原因
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
所以我把它改成了 https
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >