Hallo zusammen,
in meiner Anwendung habe ich eine Textarea die von einem anderen Programm gefüllt wird. Diesen String forme ich mir zu einem Document um damit ich dann diesen String als XML verarbeiten kann.
Enthält der String keine Sonderzeichen oder Umlaute ist alles in ordnung und ich kann das XML verarbeiten. Nun kann es aber vorkommen, dass dort Umlaute enthalten sind und dann möchte ich aber trotzdem noch mein XML verarbeiten können.
Ich habe jetzt schon die Kodierung bei getBytes() angegeben als “ISO-8859-1” und “ISO8859_1” mit dem gleichen Ergebniss als hätte ich nichts, angegeben.
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public final class XMLService{
public xmlLesen(String eingabe){
InputStream in = new ByteArrayInputStream(eingabe.getBytes("ISO-8859-1"));
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
builder = factory.newDocumentBuilder();
->> Document doc = builder.parse(in);
doc.getDocumentElement().normalize();
// Verarbeitung des XMLs
}
}
Stacktrace:
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(UTF8Reader.java:687)
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(UTF8Reader.java:372)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1753)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.scanLiteral(XMLEntityScanner.java:1074)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanAttributeValue(XMLScanner.java:948)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanAttribute(XMLDocumentFragmentScannerImpl.java:1507)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1280)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2717)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:489)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:237)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:121)
at meineApp.util.XMLService.xmlLesen(XMLService.java:99)```
Hab ich irgendwas vergessen, oder gibt es andere Möglichkeiten?
Hatte schon überlegt, den String vorm Umformen in einen Inputstream durch zugehen und alle Umlaute und sonderzeichen zu ersetzen, aber das ist bestimmt nicht zu effizient und auf fehleranfällig, wenn ich irgendein Zeichen vergessen sollte.