在XSLT中更改“&”符号

时间:2014-07-09 19:16:02

标签: xslt latex

说我有一个XML文档

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

<othertag>
You &amp; me
</othertag>

我想使用XSLT将此代码转换为LaTeX。当我应用脚本

<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"/>
<apply-templates/>

我得到了

Me & you
You & me

但是,由于&是LaTeX中的活动角色,我宁愿希望输出变为

Me \& you
You \& me

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

2 个答案:

答案 0 :(得分:2)

您的XSLT实际上并不有效,因为 xsl:apply-templates 应该在某些描述的 xsl:template 中。

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

试试这个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>

答案 1 :(得分:2)

由于您使用的是XSLT 2.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>