XML Includes
 
gibt es leider nicht. Aber mit XML Entities erreicht man fast genau das Gleiche. XML Entities erlauben es Teile einer XML Datei in eine separate Datei auszulagern oder immer wieder gleiche Teile in mehreren XML Dateien zu verwenden. Dies ist z.B. bei Struts, in den "Struts-config.xml" Dateien oder "Validation.xml" Dateien sehr nützlich. Die Syntax ist folgende:
<Todo>
Allerdings gibt es einen kleinen Wehrmutstropfen: Die auszulagernde Datei kann nur ein XML-Root Element enthalten. Dadurch können nicht wahlfrei Elemente aus XML Datei in eine Entity Datei ausgelagert werden, sondern nur ein XML Element (das Entity) mit all seinen Unterelementen.
 
XML Zeichensatz oder das Euro Zeichen
 
Spätestens bei der Darstellung des Euro-Zeichens läuft der Anwendungsentwickler gern ins Fettnäpfchen und weiß sich nur mit übelsten Kopfständen wieder herauszuhelfen. Wer beschäftigt sich auch schon gerne und freiwillig mit Zeichensätzen. Es schlagen hier gleich eine ganze Reihe von Fehlerquellen gleichzeitig zu. Wichtig ist, dass der Zeichensatz in einem XML Bytestrom zweimal richtig umgesetzen wird. Als Erstes sollte das Encoding im XML Byte Strom, gleich in der ersten Zeile, mit angegeben werden:
<?xml version="1.0" encoding="UTF-8"?>
Danach müssen auch alle weiteren Bytes gültige UTF-8 Zeichen sein. Erstellt man die XML Datei mit einem Standard Editor, verwendet der mit aller Wahrscheinlichkeit den Windows Zeichensatz. Es muss daher ein Editor verwendet werden, mit dem sich der Zeichensatz umstellen lässt auf UTF-8. Hat man dies unterlassen, kommen zwar viele Zeichen korrekt, da der Windows und UTF-8 Zeichensatz viele Zeichen gemeinsam haben, nicht aber das Euro Symbol. Man kann den Fehler auch andersherum machen, den Binärstrom zwar in UTF-8 zu speichern aber ohne in der ersten Zeile das Encoding einzutragen. Die XML Parser verwenden dann ein default Encoding. Dieses ist nicht UTF-8 und das Euro Zeichen erscheint wiederum falsch. Für XSLT Dateien gilt das Gleiche, da diese ebenfalls unter die Kategorie der XML Dateien fallen.

Erstellt man XML Byteströme direkt aus Java, muss man wissen, dass alle Strings und Characters in Java immer in Unicode sind. Alle Einstellungen an welchen Encodings auch immer ändern daran nichts. Encoding kommt bei Java immer erst dann ins Spiel, wenn Bytes in Strings oder andersherum transformiert werden. Hierbei findet immer ein Encoding statt. Im folgenden Beispiel wird ein String in einen Bytestream umgewandelt,
byte[] bytes = xmlString.getBytes("UTF-8");
ByteArrayInputStream by = new ByteArrayInputStream(bytes);
return new StreamSource(by);
wobei in der ersten Zeile das Encoding auf UTF-8 gesetzt wird.
PS: Auch ein Escapen mit XML/XSLT Escape Zeichen wie &#1234 wobei 1234 das UTF-8 Zeichen angibt; bringt nichts, wenn das Encoding im Header fehlt oder falsch angegeben ist.