Question

J'utilise un fichier séparé .dtd comme doctype pour mon fichier xml personnalisé:

names.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE name SYSTEM "names.dtd">
<names>
    <name>
        <text>Pep&eacute;</text>
        <creator>&lost;</creator>
        <history>&lost;</history>
    </name>
    <name>
        <text>Charles</text>
        <creator>James</creator>
        <history>&lost;</history>
    </name>
</names>

names.dtd

<!ELEMENT name (text, creator+, history)>
<!ELEMENT text (#PCDATA)>
<!ELEMENT creator (#PCDATA)>
<!ELEMENT history (#PCDATA)>

<!-- Placeholder/unknown history or creator name -->
<!ENTITY lost "Lost in the depths of time.">
<!ENTITY eacute "é">

Toutefois, lorsque vous essayez d'accéder names.xml je reçois l'erreur suivante:

  XML

Parsing Error: entité non définie   Emplacement:    http: //localhost/.../names.xml ligne   Numéro 5, Colonne 18:

<text>Pep&eacute;</text>
---------^

Juste pour names.xml et names.dtd éclaircissements sont dans le même répertoire et en utilisant http: // localhost /.../ names.dtd ne fonctionne pas non plus.

Cela ne semble pas fonctionner lorsque vous mettez le <!ENTITY dans un <!DOCTYPE en names.xml cependant. Quelqu'un peut-il conseiller à ce sujet?

Était-ce utile?

La solution

Si vous ouvrez le document dans Firefox pour essayer de savoir si vous avez la bonne dtd, ne sont pas. Firefox ne passe pas le xml et dtd par un analyseur XML approprié. Ouvrez votre document XML dans IE qui fera de votre document à passer à travers l'analyseur MSXML.

Lors de l'ouverture du document XML dans IE, il renvoie une erreur au sujet de votre DTD en utilisant des caractères non valides. Vous devez utiliser le code de caractère pour le lieu que le eacute caractère lui-même. Voici le code que je dois travailler ...

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE NAME SYSTEM "names.dtd">
<names>
    <name>
        <text>Pep&eacute;</text>
        <creator>&lost;</creator>
        <history>&lost;</history>
    </name>
    <name>
        <text>Charles</text>
        <creator>James</creator>
        <history>&lost;</history>
   </name>
</names>

et

<!ELEMENT name (text, creator+, history)>
<!ELEMENT text (#PCDATA)>
<!ELEMENT creator (#PCDATA)>
<!ELEMENT history (#PCDATA)>

<!ENTITY lost "Lost in the depths of time.">
<!ENTITY eacute "&#233;">

Autres conseils

ne se charge pas DTDs externe (ni ne Safari, il < a href = "http://en.wikipedia.org/wiki/Comparison_of_layout_engines_(XML)#Schema_technologies" rel = "nofollow noreferrer"> ressemble aucun navigateur ne). Votre DTD XML et travail bien dans xmllint si je dis à charger DTD externes:

$ xmllint --loaddtd names.xml 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE names SYSTEM "names.dtd">
<names>
    <name>
        <text>Pep&eacute;</text>
        <creator>&lost;</creator>
        <history>&lost;</history>
    </name>
    <name>
        <text>Charles</text>
        <creator>James</creator>
        <history>&lost;</history>
    </name>
</names>

modifier : Comme hsivonen souligne dans les commentaires, en utilisant DTDs pour résoudre des entités externes est une mauvaise idée . Vous devriez généralement pas utiliser DOCTYPE ou DTD sur le web. Si vous souhaitez valider un document, vous devez utiliser un schéma séparé ( RELAX NG est recommandé à cet effet), et pas un DTD intégré dans le document lui-même.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top