XML Verarbeitungsfehler in Zusammenhang mit
Sanjoy
- xml
Hallo liebe Helfer,
ich habe ein php Script, dass mir eine XML Datei erstellt. Wenn ich die XML Datei anschließend mit beispielsweise Firefox öffne, meldet er folgenden Fehler:
XML-Verarbeitungsfehler: Undefinierte Entität
Adresse: http://local.test.de/xml.php?id=1
Zeile Nr. 75, Spalte 40:
<field name="Primärtherapie"> </field>
---------------------------------------^
Anscheinend habe ich es nicht verstanden, aber ich dachte " " wäre eine "Generelle Entität" (heißt doch so, oder?).
Wo liegt mein Verständnisfehler?
Vielen Dank und lieben Gruß
Sanjoy
Hallo!
Anscheinend habe ich es nicht verstanden, aber ich dachte " " wäre eine "Generelle Entität" (heißt doch so, oder?).
Wo liegt mein Verständnisfehler?
Kurze Antwort: Schriebe  
Lange Antwort: Die einzigen Entities, die XML vordefiniert, sind & < > und ". Alles andere musst Du erst einmal als NCR (&#...; oder &#x...;) angeben. Da zählt auch dazu. Du kannst Dir natürlich eine Entity definieren in Deiner DTD, das wird Dir aber in Mozilla-Produkten nichts nützen, da diese keinen validierenden Parser einsetzen und somit die Entity nicht auflösen. Und zudem den XML-Standard darin verletzen, dass sie - obwohl sie *nicht* validieren - die Entity nicht wenigstens einfach als "Entity Reference"-Knoten in den DOM-Baum einfügen und bei der Ausgabe ignorieren, sondern fälschlicherweise einen Parserfehler ausgeben. Oder kurz zusammengefasst: Eigene Entities in XML + Mozilla = Knallt und die Mozilla-Leute haben kein Interesse das auf die eine oder andere Weise zu fixen (entweder Parser validierend machen oder eben keinen Fehler ausspucken, wenn eine Entity unbekannt ist).
Viele Grüße,
Christian
Vielen Dank für eure Hilfe!
Hi,
Lange Antwort: Die einzigen Entities, die XML vordefiniert, sind & < > und ".
Korrektur: und ' (die einfachen Anführungsstriche werden also nicht mehr gegenüber den zweifachen " Anführungsstrichen benachteiligt)
cu,
Andreas
@@Christian Seiler:
Kurze Antwort: Schriebe  
Besser: Schreibe  
Wennschon numerische Referenzen, dann doch bitte hexadezimal ...
Live long and prosper,
Gunnar
Unicode?
  anstatt
Unicode?
  anstatt
das ist kein unicode sondern eine nummerische referenz auf ein unicode-zeichen - das hier ist ist das gewünscht zeichen [ ] (zwischen den eckigen klammern als kopiervorlage :p)
Adresse: http://local.test.de/xml.php?id=1
ich denke, dass die stiftung warentest darüber nicht begeistert ist, dass du auf derern domain herumtesttest - korrigiere mich, wenn ich falsch liege ;)
<http://www.rfc-editor.org/rfc/rfc2606.txt Abschnitt 3> dürfte dich interessieren
<field name="Primärtherapie"> </field>
---------------------------------------^Anscheinend habe ich es nicht verstanden, aber ich dachte " " wäre eine "Generelle Entität" (heißt doch so, oder?).
nein, ist ein html-entität - mit xml hat das wenig zu tun
hier ist, soweit ich im kopf habe, lediglich gt; < & " sowie ' definiert - mit korrekter zeichencodierung besteht für andere entities oder nummerische referenzen keine notwenigkeit
Wo liegt mein Verständnisfehler?
einerseits versuchst du als platzhalter für einen leeren wert zu verwenden
was spricht gegen
<field name="Primärtherapie"></field>
oder
<field name="Primärtherapie" />
oder
<field name="Primärtherapie">NULL</field>
andererseits wäre, wenn du wirklich ein geschützes leerzeichen verwenden willst, eben dieses zeichen das richtige
U+00A8 oder dezimal ausgedrückt 160, also dieses hier ' ' das richtige zeichen
U+00A8
korrektur U+00A0
@@suit:
hier ist, soweit ich im kopf habe, lediglich gt; < & " sowie ' definiert
Kein Loch im Kopf. ;-)
mit korrekter zeichencodierung besteht für andere entities oder nummerische referenzen keine notwenigkeit
Doch, gerade beim no-break space ist escapen durchaus sinnvoll. ([QA-ESCAPES]: Unsichtbare oder nicht unterscheidbare Zeichen)
Live long and prosper,
Gunnar
Doch, gerade beim no-break space ist escapen durchaus sinnvoll. ([QA-ESCAPES]: Unsichtbare oder nicht unterscheidbare Zeichen)
mit einem vernünftigen editor lassen sich unsichtbare zeichen aber durchaus anzeigen - ich bevorzuge diese variante ;)
"kaputt" := {
xsltproc beschwert sich nach einer nachträglichen ENTITY Deklaration zu "nbsp" in einem Dump von phpinfo() über "Opening and ending tag mismatch"
(DOMDocument) $dom->loadXML($xml_str) meckert ähnlich wenn " " im phpinfo()-Output (in $xnl_str) durch " " oder "�xA0;" oder chr(160) ersetzt wurde; und zwar unabhängig davon, ob das Dokument "UTF-8" od. "ISO-8859-1" deklariert wurde und ob und wann ein utf8_encode passiert ist.
}
Mittlerweile habe ich wohl alle Reihenfolgen und Kombinationen von encoding, utf8_de/encode und str_replace(" ") durchgetestet aber phpinfo() "will" offenbar weder mit noch ohne " " & Co. ins DOM(?)
Ein Dreizeiler mit php_info(), str_replace() o.ä. und einem dann erfolgreichen loadXML wäre überaus hilfreich!
Grüsse
Solkar