在使用XSLT转换XSLT时保留实体引用

时间:2015-05-23 19:22:19

标签: xml xslt xslt-2.0

我想用XSLT转换一些XSLT文件来获取新的XSLT文件,这实际上工作得很好。只有一个功能提供问题:如果我复制/甚至我尝试手动构建此功能

   <xsl:function name="mr:get_xmlname">
    <xsl:param name="name"/>

    <xsl:value-of 
        select="replace($name,'[^A-Z|_|a-z|&#xC0;-&#xD6;|&#xD8;-&#xF6;|&#xF8;-&#x2FF;|&#x370;-&#x37D;|&#x37F;-&#x1FFF;|&#x200C;-&#x200D;|&#x2070;-&#x218F;|&#x2C00;-&#x2FEF;|&#x3001;-&#xD7FF;|&#xF900;-&#xFDCF;|&#xFDF0;-&#xFFFD;|&#x10000;-&#xEFFFF;|\-|\.|0-9|&#xB7;|&#x0300;-&#x036F;|&#x203F;-&#x2040;]','_')"
    />
</xsl:function>

我总是最终得到

    <xsl:function name="mr:get_xmlname">
    <xsl:param name="name"/>
    <xsl:value-of
        select="replace($name,'[^A-Z|_|a-z|À-Ö|Ø-ö|ø-˿|Ͱ-ͽ|Ϳ-῿|‌-‍|⁰-↏|Ⰰ-⿯|、-퟿|豈-﷏|ﷰ-�|-|\-|\.|0-9|·|̀-ͯ|‿-⁀]','_')"
    />
</xsl:function>

但实际上我希望它保持原样。我已经使用disable-output-escaping尝试了一些东西,但它似乎没有影响,就像它是一个属性而没有文本节点。

如果您对如何“手动”构建语句有一些想法,那对我来说也是一个有效的解决方案。

提前多多感谢

martre

1 个答案:

答案 0 :(得分:5)

尝试<xsl:output encoding="us-ascii"/>,它会强制所有非ASCII字符使用十六进制或十进制字符引用进行序列化,无论它们是否以这种方式开始生效。