我正在使用Java程序中的XSL进行XML转换。这是示例XML
<root>
<head>Heading goes here</head>
<middle>Some text goes here</middle>
<body>Body goes here ’ with special characters</body>
</root>
XSL具有标识模板,它只删除<middle>
元素。
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<!-- the identity template -->
<xsl:template match="@* | node()" name="identity">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<!-- template to remove middle element -->
</xsl:stylesheet>
转换是通过Java程序(Transformer类)完成的。转换后,正文中的’
将转换为'char。我想保留’
而不是'char。请告诉我如何实现这一目标?
提前谢谢。
答案 0 :(得分:3)
通常,变换器将字符输出为文字,除非它们无法在选定的输出编码中表示。如果要将非ASCII字符保留为字符引用,请告诉样式表使用US-ASCII作为输出编码:
<xsl:output method="xml" encoding="US-ASCII" omit-xml-declaration="yes"/>
现在所有非ASCII字符都必须序列化为参考。
这不一定保留字节的输入字节,例如,序列化程序可能选择使用十进制引用而不是十六进制。
答案 1 :(得分:0)
由于XSLT在包含所有字符作为Unicode字符的树上运行,与原始词法表示无关,因此无法使用纯XSLT处理器来保留从输入复制到输出的字符的表示形式。您需要使用像LexEv http://andrewjwelch.com/lexev/这样的预处理器来首先将字符表示转换为您的XSLT可以操作并转换或保留的标记。