3

我有以下 XML:

<root>
   <child value="&#xFF;&#xEF;&#x99;&#xE0;"/>
</root>

当我进行转换时,我希望保留字符十六进制代码值。因此,如果我的转换只是一个简单xsl:copy的转换并且输入是上述 XML,那么输出应该与输入相同。

我已经阅读了saxon:character-representation函数,但现在我使用的是 Saxon-HE 9.4,所以我无法使用该函数,而且我什至不能 100% 确定它会做我想要的。

我还阅读了有关use-character-maps 的信息。这似乎解决了我的问题,但我不想在我的转换中添加一个巨大的地图来捕捉每一个可能的字符十六进制代码。

<xsl:character-map name="characterMap">
    <xsl:output-character character="&#xA0;" string="&amp;#xA0;"/>
    <xsl:output-character character="&#xA1;" string="&amp;#xA1;"/>
    <!-- 93 more entries... &#xA1; through &#xFE; -->
    <xsl:output-character character="&#xFF;" string="&amp;#xFF;"/>
</xsl:character-map>

还有其他方法可以保留字符十六进制代码吗?

4

1 回答 1

1

XSLT 处理器不知道字符在输入中是如何表示的——这一切都由 XML 解析器处理。所以无法复制原版。

如果您想使用数字字符引用输出所有非 ASCII 字符,无论它们在输入中如何表示,请尝试使用 xsl:output encoding="us-ascii"。

如果您确实需要保留原始表示 - 我看不出任何人需要这样做的合理理由 - 然后尝试 Andrew Welch 的 lexev,它将所有实体和字符引用转换为在途中的处理指令,并且在退出时返回实体/字符引用。

于 2013-10-01T22:37:50.217 回答