java - 使用 Xalan-J 的 xsl cdata-section-elements 输出属性

标签 java xml xslt xalan

我正在尝试使用 Xalan 2.7.1 在 XSLT 结果中输出 CDATA 部分。我已将此 XSL 应用于工具中的 XML,结果包含 CDATA。在下面的方法中,结果中没有 CDATA,并且不会引发异常。我觉得我在这里错过了一些东西。

test.xml

<?xml version="1.0" encoding="UTF-8"?>
<parentelem>
    <childelem>Test text</childelem>
</parentelem>

测试.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();
    }
}
}

控制台输出

<?xml version="1.0" encoding="UTF-8"?><parentelem><newchildelem>Test text</newchildelem></parentelem>

最佳答案

您是说要将 CDATA 作为元素的一部分输出吗?

<newchildelem><xsl:value-of select="/parentelem/childelem" /></newchildelem>

<newchildelem><xsl:text>&lt;![CDATA[
</xsl:text><xsl:value-of select="/parentelem/childelem" /><xsl:text>]]&gt</xsl:text></newchildelem>

或其他形式,但省略转义字符

<newchildelem><![CDATA[Test text]]></newchildelem>

或者我可能误解了这个问题?

关于java - 使用 Xalan-J 的 xsl cdata-section-elements 输出属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1065200/

相关文章:

java - 以下类无法实例化 : android. support.constraint.ConstraintLayout

java - 类型不匹配 : cannot convert from ViewGroup. LayoutParams 到 LinearLayout.LayoutParams

XSLT:reocurring xpath的缩写

java - Graphics2D.drawPolyline() 与 Graphics2D.drawLine()

java - 关于 for 循环和异常

Java String-buffer - 如何计算字符串中特定单词的出现次数

java - 对在 Java 中追加字符串感到困惑

java - 使用 getTextContent() 时数组列表中的空字符串

XSLT 在与根元素具有相同命名空间声明的内部标记中缺少命名空间

xml - XSLT:将节点向上移动一级