转换后如何保留特殊字符?

时间:2015-01-13 05:30:48

标签: java xml xslt special-characters transformation

我正在使用Java程序中的XSL进行XML转换。这是示例XML

<root>
 <head>Heading goes here</head>
 <middle>Some text goes here</middle>
 <body>Body goes here &#x2019; 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类)完成的。转换后,正文中的&#x2019;将转换为'char。我想保留&#x2019;而不是'char。请告诉我如何实现这一目标?

提前谢谢。

2 个答案:

答案 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可以操作并转换或保留的标记。