如何解决这些XML错误?

问题描述 投票:-1回答:1

我正在学习如何使用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”。

元素类型“电影”的内容必须匹配“(titre,visa,nationalite,pays,类型,开发,realisateur,duree,acters,scenario)”。

xml dtd
1个回答
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)>
    

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

© www.soinside.com 2019 - 2024. All rights reserved.