Illegal XML Character

smathedark

Mitglied
Hallo,

meine Applikation soll Ausgaben anderer Programme entgegen nehmen und diese dann in ein XML File schreiben. Nun erzeugen manche dieser Programme Ausgaben, die Zeichen enthalten, die nicht in XML abgebildet werden können. Sollen solche Ausgaben geschrieben werden, so wird eine illegal xml character exception geworfen.
Kenn jemand von euch eine Funktion um einen String auf seine XML Konformität zu prüfen, bzw die falschen Zeichen zu entfernen?

Danke
 
Hallo,

ein Vorschlag von mir wäre mal, dass du dir einen Parser schreibst, der die Zeichen in die erlaubte Form umwandelt.

So als Stichwort String.replaceAll();

MFG

Sascha
 
Hallo,

meine Applikation soll Ausgaben anderer Programme entgegen nehmen und diese dann in ein XML File schreiben. Nun erzeugen manche dieser Programme Ausgaben, die Zeichen enthalten, die nicht in XML abgebildet werden können. Sollen solche Ausgaben geschrieben werden, so wird eine illegal xml character exception geworfen.
Kenn jemand von euch eine Funktion um einen String auf seine XML Konformität zu prüfen, bzw die falschen Zeichen zu entfernen?Danke

Hi,

ein Ansatz wäre das entfernen per String.replace() und einer regenExe oder wenn was ich doch mal anneheme diese erwähnten Zeichen benötigt werden, diese in base64 wandeln bzw. in einem CData-Tag unterbringen ( in dem kann stehen was will)....

hmf
 
Hallo,

die Steuerzeichen in der Ausgabe werden von mir nicht benötigt. Man könnte sagen, dass das Vorhandensein dieser Zeichen in der Ausgabe ein Fehler des Programms ist. Ich habe mir nun durch eine kleine Funktion geholfen, welche alle verbotenen Zeichen in Leerzeichen verwandelt. Dies ist nicht schön aber ausreichend.
Hier der Code der Funktion:

Code:
public String removeInvalidHexChar(String string) {
		char[] result = string.toCharArray();
		String fixedString=null;
		for(int i=0;i<result.length;++i){
			char c=result[i];
			if((c>=0x0 && c<=0x8)||
					(c>=0xB && c<=0xC)||
					(c>=0xE && c<=0x1F)||
					(c>=0xD800 && c<=0xE000)||
					(c>=0xFFFE && c<=0x10000)){
				result[i]=' ';
				
			}
		}
		fixedString=new String(result);
		return fixedString;
	}

Wenn jemand eine Performantere Lösung einfällt wäre ich dafür dankbar, das Problem ist aber erstmal gelöst.

Danke euch!
 
Zurück