我已经在谷歌上搜索了几个小时(几天),但没有找到我为什么会遇到这个问题,让我向你解释一下。
概括
我想转换一个 xml,更具体地说,获取一个标签值,它是一个带有表情符号的 cdata。但是,在转型之后,我得到了这个<cdata-given-xml-value><![CDATA[A - ]]><![CDATA[ - B]]></cdata-given-xml-value>而不是这个<cdata-given-xml-value>A - - B</cdata-given-xml-value>
之后的所有细节:
输入 xml:
<?xml version="1.0" encoding="utf-8"?>
<d>
<t><![CDATA[A - - B]]></t>
</d>
输入 xsl :
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output
method="xml"
encoding="utf-8"
indent="yes"
cdata-section-elements="cdata-given-xml-value"
/>
<xsl:template match="/">
<xsl:variable name="xml-value" select="/d/t/text()" />
<d>
<cdata-given-xml-value><xsl:copy-of select="$xml-value" /></cdata-given-xml-value>
<given-xml-value><xsl:value-of select="$xml-value" /></given-xml-value>
</d>
</xsl:template>
</xsl:stylesheet>
预期的 :
<?xml version="1.0" encoding="utf-8"?>
<d>
<cdata-given-xml-value><![CDATA[A - - B]]></cdata-given-xml-value>
<given-xml-value>A - 💰 - B</given-xml-value>
</d>
实际的 :
<?xml version="1.0" encoding="utf-8"?>
<d>
<cdata-given-xml-value><![CDATA[A - ]]><![CDATA[ - B]]></cdata-given-xml-value>
<given-xml-value>A - 💰 - B</given-xml-value>
</d>
爪哇:
此实现是可用的rt.jar
public void Xslt(Document document, File xsl, String encoding, Writer writer, String... args) throws TransformerException {
// Set system property here for tests purpose
System.setProperty("javax.xml.transform.TransformerFactory", "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl");
Transformer transformer = TransformerFactory.newInstance().newTransformer(new
StreamSource(xsl));
transformer.setOutputProperty(OutputKeys.INDENT, true);
transformer.setOutputProperty(OutputKeys.ENCODING, 'UTF-8');
transformer.transform(new DOMSource(document), new StreamResult(writer));
}
我也试过saxon-he了,但它不允许使用集成扩展功能(调用 java 方法),我需要这个功能。
xalan-2.7.2.jar似乎有同样的问题。
如果您需要更多数据,请告诉我 ;-)