XML和DTD:元素类型的内容必须匹配

时间:2016-11-23 02:51:47

标签: xml dtd xml-dtd dtd-parsing

我正在学习XML,我正在努力学习第一个DTD扩展。

我的DTD:

<!ELEMENT  biblio (livre*) >

<!ELEMENT  livre (achat , auteurs, titre ) >
<!ATTLIST livre langue CDATA  #IMPLIED
         ref  CDATA  #IMPLIED>



<!ELEMENT  achat EMPTY >
<!ATTLIST achat  date CDATA #IMPLIED
        lieu CDATA #IMPLIED>


<!ELEMENT  titre (#PCDATA)>
<!ATTLIST titre genre CDATA #IMPLIED
        type NMTOKEN #IMPLIED>



<!ELEMENT  auteurs (auteur+) >


<!ELEMENT  auteur ( nom?, prenom? ,sexe?) >
<!ELEMENT nom (#PCDATA)>
<!ELEMENT prenom (#PCDATA)>
<!ELEMENT sexe (#PCDATA)>

如果我启动了解析器,似乎:

  

元素类型“livre”的内容必须匹配(achat,auteus,titre)

我的XML:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE biblio SYSTEM  "Dtdbiblio.dtd">



<biblio>
    <livre langue="francais" ref="1684561564">
        <achat date="11/11/1993" lieu="london"/>
        <titre genre="G" type="politique">      Tiiiiiiiiiiiiiiiiiiiiiiiiitre </titre>
        <auteurs>
            <auteur>
                <nom>x</nom>
                <prenom>x</prenom>
                <sexe>H</sexe>
            </auteur>
        </auteurs>
    </livre>

</biblio>

如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

,中的逗号((achat , auteurs, titre ))指定元素必须出现的顺序。 (See here for more detail.

所以(achat , auteurs, titre )只代表一个achat,后面只有一个auteurs,后面只有一个titre

您只需要在XML实例中更改titreauteurs的顺序:

<biblio>
    <livre langue="francais" ref="1684561564">
        <achat date="11/11/1993" lieu="london"/>
        <auteurs>
            <auteur>
                <nom>x</nom>
                <prenom>x</prenom>
                <sexe>H</sexe>
            </auteur>
        </auteurs>
        <titre genre="G" type="politique">      Tiiiiiiiiiiiiiiiiiiiiiiiiitre </titre>
    </livre>

</biblio>

或在DTD中:

<!ELEMENT  livre (achat, titre, auteurs) >