说我有一个XML文档
<?xml version="1.0" encoding="UTF-8"?>
<sometag>
Me & you
</sometag>
<othertag>
You & 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
这应该发生在文档中&
的所有出现。
答案 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(., '&', '\\&')" />
</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="&" string="\&"/>
</xsl:character-map>
</xsl:stylesheet>