更改`&;`登录XSLT

更改`&;`登录XSLT,xslt,latex,Xslt,Latex,假设我有一个XML文档 <?xml version="1.0" encoding="UTF-8"?> <sometag> Me &amp; you </sometag> <othertag> You &amp; me </othertag> 但是,由于&是LaTeX中的一个活动角色,因此我更希望输出成为 Me \& you You \& me 这应该发生在文档中出现的所有&中。您的XSLT实际上是无

假设我有一个XML文档

<?xml version="1.0" encoding="UTF-8"?>
<sometag>
Me &amp; you
</sometag>

<othertag>
You &amp; me
</othertag>
但是,由于
&
是LaTeX中的一个活动角色,因此我更希望输出成为

Me \& you
You \& me

这应该发生在文档中出现的所有
&
中。

您的XSLT实际上是无效的,因为xsl:apply templates应该位于某个描述的xsl:template

话虽如此,您所需要做的只是拥有一个匹配text()节点的模板,并使用xpath函数replace替换它

试试这个XSLT

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" omit-xml-declaration="yes" encoding="UTF-8"/>

<xsl:template match="text()">
   <xsl:value-of select="replace(., '&amp;', '\\&amp;')" />
</xsl:template>
</xsl:stylesheet>

您的XSLT实际上是无效的,因为xsl:apply-templates应该位于某种描述的xsl:template

话虽如此,您所需要做的只是拥有一个匹配text()节点的模板,并使用xpath函数replace替换它

试试这个XSLT

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" omit-xml-declaration="yes" encoding="UTF-8"/>

<xsl:template match="text()">
   <xsl:value-of select="replace(., '&amp;', '\\&amp;')" />
</xsl:template>
</xsl:stylesheet>

既然您使用的是XSLT2.0,那么还可以使用
xsl:character map
。如果要修改多个字符,这可能会更容易

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" use-character-maps="chars"/>
    <xsl:strip-space elements="*"/>

    <xsl:character-map name="chars">
        <xsl:output-character character="&amp;" string="\&amp;"/>
    </xsl:character-map>

</xsl:stylesheet>

既然您使用的是XSLT2.0,那么还可以使用
xsl:character map
。如果要修改多个字符,这可能会更容易

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" use-character-maps="chars"/>
    <xsl:strip-space elements="*"/>

    <xsl:character-map name="chars">
        <xsl:output-character character="&amp;" string="\&amp;"/>
    </xsl:character-map>

</xsl:stylesheet>


是的,当我做了一个有效的例子时,我有点搞砸了。但谢谢你,一旦这成为可能,我会接受的。:-)是的,当我做了一个有效的例子时,我有点搞砸了。但谢谢你,一旦这成为可能,我会接受的。:-)事实上我有,所以我可能会使用这个解决方案,谢谢!:-)事实上我有,所以我可能会使用这个解决方案,谢谢!:-)