Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[XML/SAX] Umwandlung von Sonderzeichen

253 views
Skip to first unread message

Thorsten Lutz

unread,
Sep 11, 2003, 11:04:20 AM9/11/03
to
Hallo,

ich habe folgende Situation. Zum Parsen eines XML-Files verwende ich
folgenden Code:

File file = new File(path);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
xml_doc = builder.parse(file);

Das funktioniert eigentlich auch ganz ok. Probleme treten auf, wenn im
XML-Code Sonderzeichen stehen.

Wenn im XML-Code "Ü", "Ä", " " usw. vorkommen, z.B.
'<text>ein &Uuml; Umlaut</text>',
erhalte ich folgende Fehlermeldung: "Reference to undefined entity
"&Uuml;"."

Ersetze ich "&Uuml;" durch "&#220;" ( '<text>ein &#220;
Umlaut</text>' )
bekomme ich erst mal keine Fehlermeldung. Aber der entsprechende
Text-Knoten des DOM-Tree's enthält den Text "ein Ü Umlaut".

Wenn ich den DOM-Tree nun wieder in ein XML-File abspeichere und
versuche dieses File erneut zu parsen erhalte ich die Fehlermeldung:

"Malformed UTF-8 char -- is an XML encoding declaration missing? (line
number may be too low)."

Das ist auch völlig klar, da das Zeichen 'Ü' nur in einem Byte kodiert
ist und das nicht UTF-8 konform ist.


Mein Problem besteht also darin, dass ich dem Paraser mitteilen muss,
dass er Zeichenfolgen wie "&#220;" und "&Uuml;" ignoriert anstatt in
das "echte" Zeichen umzuwandeln.
Leider habe ich keine Ahnung, wie ich das machen soll.

Würde mich freuen, wenn jemand mir helfen könnte.

Gruß
Thorsten

Patrick Roemer

unread,
Sep 11, 2003, 11:45:15 AM9/11/03
to
Hallo,

Thorsten Lutz wrote:

> Wenn im XML-Code "&Uuml;", "&Auml;", "&nbsp;" usw. vorkommen, z.B.
> '<text>ein &Uuml; Umlaut</text>',
> erhalte ich folgende Fehlermeldung: "Reference to undefined entity
> "&Uuml;"."

Wenn Du diese Entities verwenden willst, musst Du sie einbinden, z.B. von

http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent

> Ersetze ich "&Uuml;" durch "&#220;" ( '<text>ein &#220;
> Umlaut</text>' )
> bekomme ich erst mal keine Fehlermeldung. Aber der entsprechende
> Text-Knoten des DOM-Tree's enthält den Text "ein Ü Umlaut".

Ist doch wunderbar.

> Wenn ich den DOM-Tree nun wieder in ein XML-File abspeichere

Wie?

> und
> versuche dieses File erneut zu parsen erhalte ich die Fehlermeldung:
>
> "Malformed UTF-8 char -- is an XML encoding declaration missing? (line
> number may be too low)."

Dann machst Du beim Abspeichern etwas falsch.

> Mein Problem besteht also darin, dass ich dem Paraser mitteilen muss,
> dass er Zeichenfolgen wie "&#220;" und "&Uuml;" ignoriert anstatt in
> das "echte" Zeichen umzuwandeln.

Warum?

Viele Gruesse,
Patrick

steffen horst

unread,
Sep 11, 2003, 12:01:00 PM9/11/03
to
Hallo,


> Wenn im XML-Code "&Uuml;", "&Auml;", "&nbsp;" usw. vorkommen, z.B.
> '<text>ein &Uuml; Umlaut</text>',
> erhalte ich folgende Fehlermeldung: "Reference to undefined entity
> "&Uuml;"."

Diese Entitäten sind eigentlich in XML auch nicht zulässig, wenn ich mich
recht erinnere. Es gibt so wie ich das überblicken kann drei
Möglichkeiten, mit Umlauten in XML unzugehen.

1. Du benutzt ISO-8859-1.

Dazu solltest Du das entsprechende encoding-Attribut (also <?xml
version="1.0" encoding="ISO-8859-1"?>) angeben. Bei diesem Zeichensatz
kannst Du in der XML-Datei direkt die Umlaute verwenden, sogar in Tags,
also <Bücher>...</Bücher>

2. Du benutzt UTF-8/16

Wenn Dein XML-Dokument so codiert sein soll, darfst Du natürlich auch
keine Entitäten wie &uuml; angeben, da diese in UTF-8 nicht gültig sind
(also ersetzen durch &#220; z.b.).

3. Du legst in Deinem XML-Schema oder der DTD (kann ja auch direkt in der
XML-Datei sein) die Entitäten selbst fest, die Du benutzen willst.

Die dritte Möglichkeit ist wohl nicht sehr zu empfehlen!
Wirf doch mal einen Blick auf diese Seite:

http://xmlsoft.org/encoding.html

> Ersetze ich "&Uuml;" durch "&#220;" ( '<text>ein &#220;
> Umlaut</text>' )
> bekomme ich erst mal keine Fehlermeldung. Aber der entsprechende
> Text-Knoten des DOM-Tree's enthält den Text "ein Ü Umlaut".

Warum 'aber'? Das &#220; steht ja für ein Ü. Diese Entität wird einfach
nur erkannt (UTF-8-Encodierung).

> Wenn ich den DOM-Tree nun wieder in ein XML-File abspeichere und
> versuche dieses File erneut zu parsen erhalte ich die Fehlermeldung:
> "Malformed UTF-8 char -- is an XML encoding declaration missing? (line
> number may be too low)."

Mehr Infos - wie wird der Umlaut denn in der XML-Datei abgespeichert?
Welchen Wert hat das encoding-Attribut?

> Mein Problem besteht also darin, dass ich dem Paraser mitteilen muss,
> dass er Zeichenfolgen wie "&#220;" und "&Uuml;" ignoriert anstatt in
> das "echte" Zeichen umzuwandeln.

Siehe oben. Ich würde entweder die Umlaute abspeichern wie sie sind (und
encoding auf ISO-8859-1 setzen) oder der Speicher-Klasse (wie speicherst
Du den DOM wieder ab?) sagen, dass sie die Zeichen UTF-8-konform speichern
soll.

Schönen Gruß,

Steffen


--
Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/

Thorsten Lutz

unread,
Sep 12, 2003, 2:59:10 AM9/12/03
to
Hallo,

ich habe folgende Situation. Zum Parsen eines XML-Files verwende ich
folgenden Code:

File file = new File(path);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
xml_doc = builder.parse(file);

Das funktioniert eigentlich auch ganz ok. Probleme tauchen dann auf,


wenn im XML-Code Sonderzeichen stehen.

Wenn im XML-Code z.B. "&Uuml;", "&Auml;", "&nbsp;" usw. vorkommen
------

<text>
ein &Uuml; Umlaut
</text>

------


erhalte ich folgende Fehlermeldung: 'Reference to undefined entity

"&Uuml;".'

Ersetze ich "&Uuml;" durch "&#220;"

------

<text>
ein &#220; Umlaut
</text>

------
bekomme ich keine Fehlermeldung. Aber der entsprechende Text-Knoten


des DOM-Tree's enthält den Text "ein Ü Umlaut"

Wenn ich den DOM-Tree nun wieder in ein XML-File abspeichere und
versuche dieses File erneut zu parsen erhalte ich die Fehlermeldung:
'Malformed UTF-8 char -- is an XML encoding declaration missing?

(line number may be too low).'


Das ist auch völlig klar, da das Zeichen 'Ü' nur in einem Byte kodiert
ist und das nicht UTF-8 konform ist.

Mein Problem besteht also darin, dass ich dem Paraser mitteilen muss,

dass er Zeichenfolgen wie "&#220;" oder "&Uuml;" ignoriert und nicht
in das "echte" Zeichen umwandelt.

Thorsten Lutz

unread,
Sep 12, 2003, 3:27:52 AM9/12/03
to
steffen horst <moi...@email.com> wrote in message news:<oprvcery...@news.t-online.de>...

> Diese Entitäten sind eigentlich in XML auch nicht zulässig, wenn ich mich
> recht erinnere. Es gibt so wie ich das überblicken kann drei
> Möglichkeiten, mit Umlauten in XML unzugehen.
>
> 1. Du benutzt ISO-8859-1.
>
> Dazu solltest Du das entsprechende encoding-Attribut (also <?xml
> version="1.0" encoding="ISO-8859-1"?>) angeben. Bei diesem Zeichensatz
> kannst Du in der XML-Datei direkt die Umlaute verwenden, sogar in Tags,
> also <Bücher>...</Bücher>

Vielen Dank für den Tip. Jetzt funktionierts erstmal. Bei dem XML-File
handelt es sich genauer gesagt um ein XSL-File.
Kann ein XSLT-Prozessor das "ISO-8859-1"-Encoding lesen oder gibt es
da weitere Probleme ?



> Siehe oben. Ich würde entweder die Umlaute abspeichern wie sie sind (und

> encoding auf ISO-8859-1 setzen) oder ...

Genau so mach ich das jetzt.

Gruß
Thorsten

Thorsten Marx

unread,
Sep 12, 2003, 3:30:19 AM9/12/03
to
Versuch es mal damit:

<![CDATA[ <text> ein Ü Umlaut </text>]]>


Alles zwischen "<![CDATA[" und "]]>" wird nicht geparst! oder vielleicht
musst du auch nur das Ü da rein setzen!

gruss thorsten

--
Veröffentlicht via 24help.info: Newsgroup-Foren @ http://www.24help.info

Thorsten Lutz

unread,
Sep 12, 2003, 11:21:23 AM9/12/03
to
Thorsten Marx <thm...@gmx.net> wrote in message news:<bjrsmb$mclrc$1...@ID-202995.news.uni-berlin.de>...

> Versuch es mal damit:
>
> <![CDATA[ <text> ein Ü Umlaut </text>]]>
>
>
> Alles zwischen "<![CDATA[" und "]]>" wird nicht geparst! oder vielleicht
> musst du auch nur das Ü da rein setzen!
>
> gruss thorsten

Leider kann ich den Inhalt der XML-Datei nicht festlegen. Ich muss
parsen, was kommt. Und es kömmt nun mal kein "<![CDATA[ ..."

steffen horst

unread,
Sep 14, 2003, 5:24:18 PM9/14/03
to
Hallo

>>> Wenn im XML-Code "&Uuml;", "&Auml;", "&nbsp;" usw. vorkommen, z.B.

>> Diese Entitäten sind eigentlich in XML auch nicht zulässig, wenn ich
>> mich

> Zulaessig schon - nur nicht vordefiniert.

tsss, hast wohl meine Antwort nicht ganz gelesen. Oder sie kam bei Dir
nicht ganz an:

... drei ...

>> Möglichkeiten, mit Umlauten in XML unzugehen.
>> 1. Du benutzt ISO-8859-1.

>> 2. Du benutzt UTF-8/16

*wunder* - wo ist Nr. 3?

>> Wenn Dein XML-Dokument so codiert sein soll, darfst Du natürlich auch
>> keine Entitäten wie &uuml; angeben, da diese in UTF-8 nicht gültig sind
>> (also ersetzen durch &#220; z.b.).

> Solche Entitaetsreferenzen sind auch mit UTF-8-Kodierung
> moeglich - sie sind nur nicht vordefiniert.

Oder meinst Du damit etwa was anderes als ich?

> Das ist in diesem Fall keine Entitaet, sondern eine
> Zeichenreferenz bzw. ein Zeichen.

Damit hast Du wohl recht.

0 new messages