文档类型声明包含或指向的标记声明必须格式正确

时间:2017-06-02 16:54:57

标签: xml 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)>
]>

我收到此错误:

致命错误: 公共ID:空 系统ID:文件:/home/p14524/plantdtd.dtd 行号:4 列数:3 消息:由文档类型包含或指向的标记声明 必须有良好的成形声明。

有人可以解释我遇到这个错误吗?或正确的DTD?

编辑和更新: 啊!谢谢Daniel。 现在上一个错误消失了。  我的新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 消息:元素类型的内容“植物”必须匹配“(名称,气候,高度,用法,图像)”

2 个答案:

答案 0 :(得分:2)

您需要从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时会看到一些错误。

首先,您需要声明id元素的plant属性。我建议<!ATTLIST plant id ID #REQUIRED>

第二个是第二个climate中缺少plant。我不确定这是XML错误还是DTD错误。 plant的元素声明并没有多大意义,因为它是那个顺序中的5个元素一次或多次。如果您需要有关该文章的帮助,请描述plant应包含的内容,我可以帮助您撰写正确的声明。

答案 1 :(得分:0)

“文档类型声明包含或指向的标记声明必须格式正确”错误

在我的情况下,我在代理之后,所以我猜它引起了问题

<?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" >