2017-05-28 60 views
0

我得到标记声明的错误在atlist报关行下面的XML文件中:我的XML文件和内部DTD子集有什么问题?

<?xml encoding="UTF-8"?> 
<!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)> 
<!ATLIST plant id CDATA #REQUIRED> 

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

什么是错我的XML文档?

+0

@Vijay:肯白是正确的,你真的应该实际上提出一个问题。我这次为你解决了这个问题,并提供了[answer](https://stackoverflow.com/a/44223748/290085)。希望我已经正确地解释你的意图;如果没有,请[编辑]你的问题并调整。 – kjhughes

回答

0

你的XML文档都well-formedness and validity problems ...

问题防止您的XML文档被合式,包括:

  • 有内部DTD子集的语法不正确构造。
  • 有多个XML声明。
  • ATLIST应该ATTLIST

问题防止您的XML文档被有效

  • A2plant必须有至少一个climate子元素。

下面的XML被校正为良好和有效

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE catalog [ 
<!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 CDATA #REQUIRED> 
]> 

<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> 
    <climate/> 
    <height>8-12in</height> 
    <usage>medicinal</usage> 
    <usage>decoration</usage> 
    <image>Orchidaceae.jpg</image> 
    </plant> 
</catalog> 
+0

谢谢soo !! – Vijay

0

此错误是由不被有效的DTD文件引起的。您已经创建包含DTD文件:

<!DOCTYPE catalog [ 
… 
]> 

只需删除第一个和最后一行delcaring DTD的数据,因为这些都只是你的XML文件中具有DTD时使用。应该有?在气候上,因为在工厂A2它不存在。

`

<?xml version="1.0" encoding="UTF-8"?> 

<!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 CDATA #REQUIRED> 

`