更改`&;`登录XSLT
假设我有一个XML文档更改`&;`登录XSLT,xslt,latex,Xslt,Latex,假设我有一个XML文档 <?xml version="1.0" encoding="UTF-8"?> <sometag> Me & you </sometag> <othertag> You & me </othertag> 但是,由于&是LaTeX中的一个活动角色,因此我更希望输出成为 Me \& you You \& me 这应该发生在文档中出现的所有&中。您的XSLT实际上是无
<?xml version="1.0" encoding="UTF-8"?>
<sometag>
Me & you
</sometag>
<othertag>
You & 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(., '&', '\\&')" />
</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(., '&', '\\&')" />
</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="&" string="\&"/>
</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="&" string="\&"/>
</xsl:character-map>
</xsl:stylesheet>
是的,当我做了一个有效的例子时,我有点搞砸了。但谢谢你,一旦这成为可能,我会接受的。:-)是的,当我做了一个有效的例子时,我有点搞砸了。但谢谢你,一旦这成为可能,我会接受的。:-)事实上我有,所以我可能会使用这个解决方案,谢谢!:-)事实上我有,所以我可能会使用这个解决方案,谢谢!:-)