试图让我的DTD和XML正常工作

时间:2016-11-28 22:46:52

标签: xml dtd xml-dtd

我一直试图让我的XML不仅查看DTD,而且在尝试验证我的DTD时收到错误,说明根元素之前的文档中的标记必须格式正确。我不确定我做错了什么或如何使它成为两个文件都有效。任何帮助将不胜感激。

DTD:

    <!ELEMENT measurements (#PCDATA|distance|weight|volume)>
    <!ELEMENT weight (#PCDATA)>
    <!ELEMENT volume (#PCDATA)>
    <!ELEMENT distance (#PCDATA)>
    <!ATTLIST distance status (metric|imperial) #REQUIRED>

XML:

    <?xml version="1.0"?>
    <!DOCTYPE measurements PUBLIC "-//American Sentinel//XML Applications//EN" "measurements.dtd">
    <measurement>
      <weight>5</weight>
      <volume>10</volume>
      <distance>metric</distance>
    </measurement>

1 个答案:

答案 0 :(得分:1)

在您的DTD中,measurements的声明必须是:

<!ELEMENT measurements (#PCDATA|distance|weight|volume)*>

这是因为只有一种方法可以声明mixed content

此外,您已在DTD中声明measurements(复数),但在您的XML中,您使用measurement(单数)。您必须更改DTD或XML。如果您更改了DTD,请不要忘记更改XML中的doctype声明。

另一件事是,status属性在DTD中声明为必需。

固定DTD和XML的示例......

<强> DTD

<!ELEMENT measurements (#PCDATA|distance|weight|volume)*>
<!ELEMENT weight (#PCDATA)>
<!ELEMENT volume (#PCDATA)>
<!ELEMENT distance (#PCDATA)>
<!ATTLIST distance status (metric|imperial) #REQUIRED>

<强> XML

<!DOCTYPE measurements PUBLIC "-//American Sentinel//XML Applications//EN" "measurements.dtd">
<measurements>
    <weight>5</weight>
    <volume>10</volume>
    <distance status="metric"/>
</measurements>