Frage

Ich verwende eine separate .dtd Datei als Doctype für meine benutzerdefinierte XML-Datei:

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 "é">

Allerdings, wenn man versucht names.xml zuzugreifen ich folgende Fehlermeldung erhalten:

  

XML-Parsing-Fehler: nicht definiert Einheit   Lage:    http: //localhost/.../names.xml Linie   Nummer 5, Spalte 18:

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

Nur zur Klarstellung names.xml und names.dtd sind im gleichen Verzeichnis und mit http: // localhost /.../ names.dtd funktioniert auch nicht.

Dies scheint zu funktionieren, wenn jedoch die <!ENTITY in einem <!DOCTYPE in names.xml setzen. Kann jemand dies mitteilen?

War es hilfreich?

Lösung

Wenn Sie das Dokument in Firefox zu öffnen, um zu versuchen, wenn Sie die dtd richtig, um herauszufinden, nicht. Firefox nicht passiert den XML und dtd durch einen richtigen XML-Parser. Öffnen Sie Ihr XML-Dokument im Internet Explorer, die bewirkt, dass das Dokument durch die MSXML-Parser übergeben werden.

Wenn das XML-Dokument in IE öffnen, wird es eine Fehlermeldung über Ihre DTD ungültige Zeichen werfen. Sie müssen den Zeichencode für das eacute anstatt die Zeichen selbst verwenden. Hier ist der Code, den ich an der Arbeit ...

<?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>

und

<!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;">

Andere Tipps

Firefox nicht geladen externe DTDs (noch tut Safari, es < a href = "http://en.wikipedia.org/wiki/Comparison_of_layout_engines_(XML)#Schema_technologies" rel = "nofollow noreferrer"> sieht aus wie keinen Browser tun). Ihre DTD & XML funktioniert in xmllint wenn ich ihm sagen, externen DTDs zu laden:

$ 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>

Bearbeiten : Wie hsivonen Punkte in den Kommentaren aus, DTDs mit externen Einheiten zu lösen ist ein schlechte Idee . Sie sollten in der Regel nicht DOCTYPEs oder DTDs im Web verwenden. Wenn Sie ein Dokument überprüfen möchten, sollten Sie ein separates Schema verwenden ( RELAX NG Zu diesem Zweck wird empfohlen) und kein DTD in dem Dokument eingebettet selbst.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top