2016-03-31 68 views
0

我正在从一个基本的转变中挣扎 - 从实际上Google Tables到XML到LaTeX。我的主要问题是:如何通过&符号从一端传递到另一端。&符号,XSLT和LaTeX

我知道类似的问题已经被回答了几次,但似乎没有一个可行的解决方案。 (到目前为止最好的帮助似乎是这样的:xslt 2.0 how replace $ by escaped dollar (for conversion to LaTeX)

假设我在Google Tables中有出版社“Simon & Schuster”。之后我导出和导入到XML是:

<xml> 
    <name> 
    <publisher>Simon &amp; Schuster</publisher> 
    </name> 
</xml> 
在乳胶

现在我准备了一个新的命令,以便最小化符号-问题:

\newcommand{\ampersand}{\&} 

当我到了XSLT(2.0),它获得的(太)棘手:

<xsl:function name="foo:ampersand-replace"> 
    <xsl:param name="passed-string"/> 
    <xsl:value-of select="replace($passed-string, '\&amp', '\\\ampersand')"/> 
    </xsl:function> 

    <xsl:template match="publisher"> 
    <xsl:value of select="foo:ampersand-replace(publisher)"/> 
    </xsl:template> 

,因为这不会编译(Saxxon 9.6)。问题当然是&符号:语法错误转义字符不允许。

我尝试了不同的方法,也:

<xml> 
    <name> 
    <publisher>Simon <c rendition="#ampersand"/> Schuster</publisher> 
    </name> 
</xml> 

的问题存在,随着c不是我不能使用

<xsl:value-of/> 

-command,以及处理。 任何想法我错了什么?

回答

1

我觉得你xsl:function需求是这样的:

<xsl:function name="foo:ampersand-replace"> 
    <xsl:param name="passed-string"/> 
    <xsl:value-of select="replace($passed-string, '&amp;', '\\ampersand')"/> 
</xsl:function> 

还要注意的是,当你调用它,您目前的范本符合publisher,所以你定位在等调用函数应看起来像这样...

<xsl:template match="publisher"> 
    <xsl:value-of select="foo:ampersand-replace(.)"/> 
</xsl:template>