Hallo zusammen,
leider existiert der folgende XML transform Bug in den Versionen JDK 9 und höher.
bugs.openjdk.java.net
Zum Nachstellen des Problems ein beispielhafter Code:
Mein Problem ist, dass eine Anwendung mir XML Dateien liefert und ich diese (insbesondere den CDATA) verarbeiten muss. Die plötzlich hinzugefügten Blanks führen dann zum falschen Ergebnis.
Kennt jemand einen funktionierenden Workaround, dass z.B. die XML Dateien entsprechend dem Format aus JDK 8 transformiert bzw. angepasst werden?
Vielen Dank für Eure Hilfe
leider existiert der folgende XML transform Bug in den Versionen JDK 9 und höher.
Loading...
Zum Nachstellen des Problems ein beispielhafter Code:
Java:
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
public class JI9060450 {
public static void main(String[] args) throws Exception {
String data = "data";
StreamSource source = new StreamSource(new StringReader("<foo><bar><![CDATA[" + data + "]]></bar></foo>"));
StreamResult result = new StreamResult(new StringWriter());
Transformer tform = TransformerFactory.newInstance().newTransformer();
tform.setOutputProperty(OutputKeys.INDENT, "yes");
tform.transform(source, result);
String xml = result.getWriter().toString(); // This String contains the extra whitespace
Document document = DocumentBuilderFactory.newInstance()
.newDocumentBuilder()
.parse(new InputSource(new StringReader(xml)));
String resultData = document.getElementsByTagName("bar")
.item(0)
.getTextContent();
assert(data.equals(resultData));
System.out.println(xml);
System.out.println(resultData);
}
}
Mein Problem ist, dass eine Anwendung mir XML Dateien liefert und ich diese (insbesondere den CDATA) verarbeiten muss. Die plötzlich hinzugefügten Blanks führen dann zum falschen Ergebnis.
Kennt jemand einen funktionierenden Workaround, dass z.B. die XML Dateien entsprechend dem Format aus JDK 8 transformiert bzw. angepasst werden?
Vielen Dank für Eure Hilfe