我正在努力从转型中获得基本的东西 - 实际上是Google Tables到XML,再到LaTeX。我的主要问题是:如何从一端传递到另一端的&符号。
我知道类似的问题已被多次回答,但似乎并不是一个有效的解决方案。 (到目前为止,对我来说最好的帮助是:xslt 2.0 how replace $ by escaped dollar (for conversion to LaTeX))
我们说我有出版社" Simon&舒斯特"在Google表格中。导出后将其导入XML中:
<xml>
<name>
<publisher>Simon & Schuster</publisher>
</name>
</xml>
现在在LaTeX中我准备了一个新命令,以便最小化&符号:
\newcommand{\ampersand}{\&}
当我到达XSLT(2.0)时,它会变得非常棘手:
<xsl:function name="foo:ampersand-replace">
<xsl:param name="passed-string"/>
<xsl:value-of select="replace($passed-string, '\&', '\\\ampersand')"/>
</xsl:function>
<xsl:template match="publisher">
<xsl:value of select="foo:ampersand-replace(publisher)"/>
</xsl:template>
因为这不编译(Saxxon 9.6)。问题当然是Ampersand:不允许语法错误转义字符。
我也尝试了不同的方法:
<xml>
<name>
<publisher>Simon <c rendition="#ampersand"/> Schuster</publisher>
</name>
</xml>
问题在于,我无法使用
<xsl:value-of/>
-command,以及c未处理。 知道我错了吗?
答案 0 :(得分:1)
我认为您的xsl:function
需要看起来像这样:
<xsl:function name="foo:ampersand-replace">
<xsl:param name="passed-string"/>
<xsl:value-of select="replace($passed-string, '&', '\\ampersand')"/>
</xsl:function>
另请注意,当您调用它时,您当前的模板与publisher
匹配,因此您可以对此进行定位,因此对该函数的调用应如下所示...
<xsl:template match="publisher">
<xsl:value-of select="foo:ampersand-replace(.)"/>
</xsl:template>