改造后如何保留特殊字符?

How to retain special characters after 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 class)完成的。转换后,body中的&#x2019;转换为'char。我想保留 &#x2019; 而不是 ’ 字符。请让我知道如何实现这一点?

提前致谢。

由于 XSLT 在包含所有字符作为 Unicode 字符的树上运行,独立于原始词汇表示,因此纯 XSLT 处理器无法保留从输入复制到输出的字符表示。您需要使用像 LexEv http://andrewjwelch.com/lexev/ 这样的预处理器来首先将字符表示转换为 XSLT 可以操作并转换或保留的标记。

通常情况下,转换器会将字符输出为文字,除非它们不能用选定的输出编码表示。如果您想将非 ASCII 字符保留为字符引用,请告诉您的样式表使用 US-ASCII 作为输出编码:

<xsl:output method="xml" encoding="US-ASCII" omit-xml-declaration="yes"/>

现在所有非 ASCII 字符都必须序列化为引用。

这不一定保留字节的输入字节,例如序列化程序可能选择使用十进制引用而不是十六进制。