Ich versuche, einen CDATA-Abschnitt im Ergebnis von XSLT mit Xalan 2.7.1 auszugeben. Ich habe dieses XSL in einem Tool auf das XML angewendet und das Ergebnis enthält CDATA. In der folgenden Methode ist keine CDATA im Ergebnis und es wird keine Ausnahme ausgelöst. Ich fühle mich, als würde ich hier etwas vermissen.xsl cdata-section-elements Ausgabe-Eigenschaft mit Xalan-J
test.xml
<?xml version="1.0" encoding="UTF-8"?>
<parentelem>
<childelem>Test text</childelem>
</parentelem>
Test.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="UTF-8" cdata-section-elements="newchildelem" />
<xsl:template match="/">
<parentelem>
<newchildelem><xsl:value-of select="/parentelem/childelem" /></newchildelem>
</parentelem>
</xsl:template>
</xsl:stylesheet>
Transform.java
import java.io.FileReader;
import java.io.StringWriter;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stax.StAXResult;
import javax.xml.transform.stax.StAXSource;
public class Transform {
public static void main (String[] args){
try {
XMLStreamReader xmlReader = XMLInputFactory.newInstance().createXMLStreamReader(
new FileReader("test.xml"));
XMLStreamReader xslReader = XMLInputFactory.newInstance().createXMLStreamReader(
new FileReader("test.xsl"));
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Source xslSource = new StAXSource(xslReader);
Source xmlSource = new StAXSource(xmlReader);
Transformer transf = transformerFactory.newTransformer(xslSource);
StringWriter xmlString = new StringWriter();
XMLStreamWriter xmlWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(
xmlString);
Result transformedXml = new StAXResult(xmlWriter);
transf.transform(xmlSource, transformedXml);
xmlWriter.flush();
System.out.println(xmlString.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
Konsolenausgabe
<?xml version="1.0" encoding="UTF-8"?><parentelem><newchildelem>Test text</newchildelem></parentelem>
das ist was ich gerne tun würde und Ihre Lösung funktioniert. Ich dachte, dass ich hier die cdata-Sektion-Elemente benutzen könnte, um das gleiche zu erreichen. Der cdata-section-elements-Ansatz funktioniert, wenn ich das obige xsl auf das obige XML in einem XML-Tool anwende, bekomme ich das gewünschte Ergebnis. nur wenn ich den obigen Code verwende, um die xsl anzuwenden, bekomme ich nicht das erwartete Ergebnis – hydeph