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

Preserving entity references when transforming XSLT with XSLT

我想用 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 尝试了一些东西,但它似乎没有任何影响,因为它是一个属性并且没有文本节点。

如果您对我如何构建语句有一些想法 "manually",这对我来说也是一个可行的解决方案。

非常感谢

马特

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