xsl:character-map / xsl:output-character不起作用

时间:2014-04-23 17:12:27

标签: xml xslt

我需要为我的应用使用字符转换。作为示例,我查看了图书并尝试使用示例(如果重要this book 附录A - &gt; [2.0] <xsl:character-map> 部分)

这是我的XML(来自书中):

<?xml version="1.0" encoding="utf-8"?>
<!-- special-characters.xml -->
<char-test>
    <tabs>
    public class HelloWorld {
        public static void main(String[] args) {
            System.out.println("Hello, World!");
            }
        }
    </tabs>
    <special-char>&#x2780;</special-char>
    <special-char>&#x2781;</special-char>
</char-test>

这是我的XSL(来自书中):

<?xml version="1.0" encoding="utf-8"?>
<!-- character-map1.xsl -->
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" use-character-maps="sample" />
    <xsl:character-map name="sample" use-character-maps="circles">
        <xsl:output-character character="&#x9;" string=" " />
    </xsl:character-map>
    <xsl:character-map name="circles">
        <xsl:output-character character="&#x2780;" string="&lt;img src='images/circle1.gif'
width='28' height='28'/&gt;" />
        <xsl:output-character character="&#x2781;" string="&lt;img src='images/circle2.gif'
width='28' height='28'/&gt;" />
    </xsl:character-map>
    <xsl:template match="char-test">
        <html>
            <head>
                <title>A test of some special characters</title>
            </head>
            <body style="font-family: sans-serif;">
                <h1>A test of some special characters</h1>
                <xsl:apply-templates select="*" />
            </body>
        </html>
    </xsl:template>
    <xsl:template match="tabs">
        <pre style="font-size: 150%; font-weight: bold;">
            <xsl:value-of select="." />
        </pre>
    </xsl:template>
    <xsl:template match="special-char">
        <p style="font-size: 200%;">
            <xsl:text>Here's a special character: </xsl:text>
            <xsl:value-of select="." />
        </p>
    </xsl:template>
</xsl:stylesheet>

我不希望得到➀和➁,我希望得到这些角色的替代品。我尝试使用上面的XML和XSL http://www.freeformatter.com/xsl-transformer.html

结果不符合我的预期:

<?xml version="1.0" encoding="UTF-8"?>
<html>
   <head>
      <title>A test of some special characters</title>
   </head>
   <body style="font-family: sans-serif;">
      <h1>A test of some special characters</h1>
      <pre style="font-size: 150%; font-weight: bold;">public class HelloWorld {
            public static void main(String[] args) {
                System.out.println("Hello, World!");
                }
            }</pre>
      <p style="font-size: 200%;">Here's a special character: ➀</p>
      <p style="font-size: 200%;">Here's a special character: ➁</p>
   </body>
</html>

特殊字符未被替换。我很困惑,因为这些例子来自好书,而且我可以在网上看到相同的方法。 这里的魔力在哪里?

1 个答案:

答案 0 :(得分:3)

这向我表明,您正在测试的XSLT处理器是版本1.0处理器而不是版本2.0 - 字符映射是仅2.0的功能。

如果您使用Saxon 9引擎,

http://xsltransform.net/支持2.0。