如何解决这些XML错误?

时间:2019-09-26 22:24:21

标签: xml dtd

我正在学习如何使用XML编程,并且在进行练习时遇到了一些我不知道如何处理的错误。 在此先感谢您的帮助。

filmographie.dtd

<!ELEMENT films (film)+>
<!ELEMENT film (titre, visa, nationalite, pays, genres, exploitation,       
realisateur, duree, acteurs, scenario)>
<!ELEMENT titre (#PCDATA)>
<!ELEMENT visa (#PCDATA)>
<!ELEMENT nationalite (#PCDATA)>
<!ELEMENT pays (nom)*>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT genres (genre)+>
<!ELEMENT genre (#PCDATA)>
<!ELEMENT exploitation (date_de_sortie, nombre_entrees, nombre_salles)>
<!ELEMENT date_de_sortie (#PCDATA)>
<!ELEMENT nombre_entrees (#PCDATA)>
<!ELEMENT nombre_salles (#PCDATA)>
<!ELEMENT realisateur (#PCDATA)>
<!ELEMENT duree (heures, minutes)>
<!ELEMENT heures (#PCDATA)>
<!ELEMENT minutes (#PCDATA)>
<!ELEMENT acteurs (acteur+)>
<!ELEMENT acteur (#PCDATA)>
<!ATTLIST heures unite CDATA 'h'>
<!ATTLIST minutes unite CDATA 'mn' >
<!ELEMENT scenario (#PCDATA) >

filmographie.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE filmographie SYSTEM "filmographie.dtd" >
<films>
    <film>
        <titre>King Kong</titre>
        <visa>114089</visa>
        <nationalite>Americain</nationalite>
        <pays>
            <nom>France</nom>
        </pays>
        <genres>
            <genre></genre>
        </genres>
        <exploitation>
            <date_de_sortie>2005_12_14</date_de_sortie>
            <nombre_entrees>2838759</nombre_entrees>
            <nombre_salles>547</nombre_salles>
        </exploitation>
        <realisateur>Peter Jackson</realisateur>
        <duree>
            <heures unite="h">3</heures>
            <minutes unite="mn">8</minutes>
        </duree>
        <acteurs> 
            <acteur>Peter Jackson</acteur>
            <acteur>Naomi Watts</acteur>
        </acteurs>
        <scenario></scenario>
    </film>
    <film>
        <titre>My Hero Academia</titre>
        <visa>568 789</visa>
        <nationalite>Japonais</nationalite>
        <pays>
            <nom>Japon</nom>
        </pays>
        <genres>
            <genre>Animation</genre>
            <genre>Action</genre>
            <genre>Comedie</genre>
        </genres>
        <exploitation>
            <date_de_sortie>2019_01_22</date_de_sortie>
            <nombre_entrees>1 896 754</nombre_entrees>
            <nombre_salles>148</nombre_salles>
        </exploitation>
        <realisateur>Kenji Nagasaki</realisateur>
        <duree>
            <heures unite="h">1</heures>
            <minutes unite="mn">35</minutes>
        </duree>
        <scenario></scenario>
    </film>
    <film>
        <titre>Le Dernier Maitre de l"air</titre>
        <visa>147 589</visa>
        <nationalite>Americain</nationalite>
        <pays>
            <nom>Amerique</nom>
            <nom>Japon</nom>
        </pays>
        <genres>
            <genre>Aventure</genre>
            <genre>Action</genre>
            <genre>Famille</genre>
            <genre>Fantastique</genre>
        </genres>
        <exploitation>
            <date_de_sortie>2010_08_28</date_de_sortie>
            <nombre_entrees>2 358 698</nombre_entrees>
            <nombre_salles>285</nombre_salles>
        </exploitation>
        <realisateur>Night Shyamalan</realisateur>
        <duree>
            <heures unite="h">1</heures>
            <minutes unite="mn">43</minutes>
        </duree>
        <acteurs> 
            <acteur>Noah Ringer</acteur>
            <acteur>Nicola Peltz</acteur>
        </acteurs>
        <scenario></scenario>
    </film>    
</films>       

这是我得到的错误:

  

文档根元素“电影”必须与DOCTYPE根“ filmographie”匹配。

  

“电影”元素类型的内容必须匹配“(滴定,签证,民族,薪酬,流派,开发,文物,杜蕾,演员,场景)”。

1 个答案:

答案 0 :(得分:0)

问题在于,根据DTD,第二个film元素不包含<acteurs>元素。

因此,您必须具备各种可能性:

  1. 在第二个<acteurs>元素中添加一个带有适当子元素的film元素。
  2. 将DTD更改为

    <!ELEMENT films (film)+>
    <!ELEMENT film (titre, visa, nationalite, pays, genres, exploitation,       
    realisateur, duree, acteurs?, scenario)>
    <!ELEMENT titre (#PCDATA)>
    <!ELEMENT visa (#PCDATA)>
    <!ELEMENT nationalite (#PCDATA)>
    <!ELEMENT pays (nom)*>
    <!ELEMENT nom (#PCDATA)>
    <!ELEMENT genres (genre)+>
    <!ELEMENT genre (#PCDATA)>
    <!ELEMENT exploitation (date_de_sortie, nombre_entrees, nombre_salles)>
    <!ELEMENT date_de_sortie (#PCDATA)>
    <!ELEMENT nombre_entrees (#PCDATA)>
    <!ELEMENT nombre_salles (#PCDATA)>
    <!ELEMENT realisateur (#PCDATA)>
    <!ELEMENT duree (heures, minutes)>
    <!ELEMENT heures (#PCDATA)>
    <!ELEMENT minutes (#PCDATA)>
    <!ELEMENT acteurs (acteur+)>
    <!ELEMENT acteur (#PCDATA)>
    <!ATTLIST heures unite CDATA 'h'>
    <!ATTLIST minutes unite CDATA 'mn' >
    <!ELEMENT scenario (#PCDATA) >
    

    此DTD修改了一件事:它确实将可选的运算符?添加到acteurs声明中的film元素中。所以新定义是

    <!ELEMENT film (titre, visa, nationalite, pays, genres, exploitation, realisateur, duree, acteurs?, scenario)>
    

那确实可以解决您的问题,而解决问题的方法实质上是添加一个字符。