为什么外部DTD无法验证XML文件?

时间:2019-03-26 16:59:18

标签: xml validation dtd

我需要外部DTD来验证XML文件,并且“选择”,“电话”和“电话”不断出现错误。我知道这与我的元素顺序有关,但我无法弄清楚。

我编辑了。元素手机和手机,我相信它现在正在验证

DTD

     [
        <!ELEMENT smartphones (choices+)>

        <!ELEMENT choices (phones,phone,name,company,price,storage,description)>
        <!ATTLIST choices phones NMTOKENS #REQUIRED>

    <!ELEMENT phones (phone)>
    <!ATTLIST phones CDATA #REQUIRED>

    <!ELEMENT phone (name,company,price,storage,description)>
    <!ATTLIST phone NMTOKENS #REQUIRED>

        <!ELEMENT name (#PCDATA)>

        <!ELEMENT company (#PCDATA)>

        <!ELEMENT price (#PCDATA)>

        <!ELEMENT storage (#PCDATA)>

        <!ELEMENT description (#PCDATA)>

        ]>

<!-- XML -->
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>

<!DOCTYPE smartphones SYSTEM "Vocab1DTD.dtd">

<smartphones>

<choices>Smart Phones

   <phones>
      <phone>
         <name> </name>
         <company> </company>
         <price> </price>
         <storage> </storage>
         <description> </description>
      </phone>

  </phones>
</choices>
</smartphones>

1 个答案:

答案 0 :(得分:0)

这是一个更新的DTD,可直接用于您的XML。

对XML的评论很少:在choices中将“智能手机”作为文本并没有多大意义; choicessmartphones的子项可以推断出这一点。同样,choicesphones似乎是多余的;拥有两者的目的是什么?

如果您对我所做的更改有疑问,请告诉我。

Vocab1DTD.dtd

<!ELEMENT smartphones (choices+)>
<!ELEMENT choices (#PCDATA|phones)*>
<!ELEMENT phones (phone+)>
<!ELEMENT phone (name,company,price,storage,description)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT storage (#PCDATA)>
<!ELEMENT description (#PCDATA)>