【问题标题】:What is wrong with my XML file with an internal DTD subset?我的带有内部 DTD 子集的 XML 文件有什么问题?
【发布时间】:2017-06-01 12:08:50
【问题描述】:

我在以下 XML 文件中的 atlist 声明行收到标记声明错误:

<?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 文档有什么问题?

【问题讨论】:

  • @Vijay:Ken White 说得对,你真的应该提出一个问题。这次我已经为您解决了这个问题,并提供了answer。希望我已经正确解释了您的意图;如果没有,请edit您的问题并调整。

标签: xml dtd xml-validation


【解决方案1】:

您的 XML 文档同时具有 well-formedness and validity problems...

阻碍您的 XML 文档格式正确的问题,包括:

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

阻止您的 XML 文档有效的问题:

  • A2 plant 必须至少有一个 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>

【讨论】:

    【解决方案2】:

    此错误是由 DTD 文件无效引起的。您创建了一个 DTD 文件,其中包含:

    <!DOCTYPE catalog [
    …
    ]>
    

    只需删除描述 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>
    

    `

    【讨论】:

      猜你喜欢
      • 2018-09-24
      • 2015-06-06
      • 2021-01-05
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 2010-09-11
      • 2017-07-19
      • 1970-01-01
      相关资源
      最近更新 更多