# XMLEventReader mit &lt;



## Michael_Zeke (10. Sep 2010)

Hallo,

ich habe einen XMLEventReader der Probleme beim Einlesen von XML-Dateien bereitet.

Wenn ich einen Tag wie folgt habe:
<name>Wert &lt; 5</name>

Dann bekomme ich nur "Wert " vom Parser. Beim &lt; verschluckt er sich.

Mit einem Reader wie:
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
funktioniert das ganze. Leider muss ich den XMLEventReader verwenden, da ich sehr große Tabellen habe, die nicht komplett als DOM in den Speicher passen.

Hat jemand schon mal von so einem Problem gehört oder weiß eine Lösung ?


----------



## Noctarius (10. Sep 2010)

[c]&amp;lt;[/c] So müsste es heißen. Du musst das & selber aus escapen.


----------



## Michael_Zeke (10. Sep 2010)

Leider führt auch dies nicht zum Ergebnis. 
Sobald er das erste & gefunden hat, steigt er irgendwie aus.

Was ich feststellen konnte:
- wenn ein String vor einem & kommt, wird nur der String genommen
  Bsp: <name>aa &lt;</name> -> Ergebnis: "aa"
- wenn ein String nach dem & kommt wird alles danach nicht genommen
  Bsp: <name>&lt; aa &gt;</name> -> Ergebnis: "<"

Genauso verhält es sich auch bei "<" für ein < statt &lt;


----------



## Noctarius (10. Sep 2010)

Es muss auch &amp;lt; heißen, nicht &lt;

XML != HTML


----------



## musiKk (10. Sep 2010)

Noctarius hat gesagt.:


> Es muss auch &amp;lt; heißen, nicht &lt;
> 
> XML != HTML



Äh? Mit [c]&amp;lt;[/c] kodiert man den Text [c]&lt;[/c]. Ich nehme an, der OP will den Text [c]Wert < 5[/c] kodieren und das geht natürlich mit [c]Wert &lt; 5[/c]. Das hat ja mit HTML nichts zu tun.


----------



## Noctarius (10. Sep 2010)

In reinem XML gibt es kein Entity &lt; und da kodiert man das schon so oder man muss das Entity explizit in einem DTD definieren.


----------



## Michael_Zeke (10. Sep 2010)

Leider geht auch das nicht ...



Noctarius hat gesagt.:


> [c]&amp;lt;[/c] So müsste es heißen. Du musst das & selber aus escapen.


----------



## Noctarius (10. Sep 2010)

Dann musst du wohl etwas Code posten, denn sonst ist es ins blaue raten.


----------



## Michael_Zeke (10. Sep 2010)

Danke für Eure Bemühungen.

Ich habe den Fehler gefunden!

Es liegt daran, dass der XMLEventParser den Tag-Inhalt wenn dieser Entitys enthält, aufsplittet und als mehrere XMLEvent's mit Type XMLStreamConstants.CHARACTERS zurück gibt.

Mein bisheriger Code hatte dies nicht berücksichtigt. Nun mache ich an dieser Stelle eine Schleife und prüfe, ob der nächste XMLEvent auch vom Type XMLStreamConstants.CHARACTERS ist. Wenn ja, muss ich nur die jeweiligen Strings zusammensetzen.

Die richtige Verwendung der Entity ist:
<name>5.0 &gt; Wert &lt; 2.0</name>

Wenn man ein & drin haben möchte, nur dann muss man das & kodieren
<name>C&amp;A</name> = C&A


----------



## Bierhumpen (10. Sep 2010)

Noctarius hat gesagt.:


> Es muss auch &amp;lt; heißen, nicht &lt;



Lüg doch nicht rum.


----------



## Noctarius (10. Sep 2010)

Bierhumpen hat gesagt.:


> Lüg doch nicht rum.



Sonst geht's dir aber noch gut? Oo War wohl nen Humpen zuviel, wie?


----------



## musiKk (10. Sep 2010)

Noctarius hat gesagt.:


> Sonst geht's dir aber noch gut? Oo War wohl nen Humpen zuviel, wie?



Naja, das ist wohl eine zugegebenermaßen etwas ruppige Art mitzuteilen, dass



Noctarius hat gesagt.:


> In reinem XML gibt es kein Entity &lt; und da kodiert man das schon so oder man muss das Entity explizit in einem DTD definieren.



einfach falsch ist. Siehe auch die Spec: _All XML processors MUST recognize these entities whether they are declared or not._


----------



## Bierhumpen (10. Sep 2010)

Noctarius hat gesagt.:


> Sonst geht's dir aber noch gut? Oo War wohl nen Humpen zuviel, wie?


Na, eh, bevor du sowas 3 mal behauptest anstatt die eigentliche Frage zu beantworten, hättest du auch mal deine Fakten prüfen können.


----------



## Noctarius (10. Sep 2010)

Selbst wenn die Aussage falsch war (ja war sie, auch ein Mod darf sich mal irren), gibt es trotzdem etwas wie Freundlichkeit - wobei vergiss es, war scheinbar auch wieder falsch.

Aber was soll's, Frage ist beantwortet, du hast Recht und ich meine Ruhe - ergo Thread zu.


----------

