2016-03-31 11 views
0

Ich kämpfe mit etwas grundlegend in einer Transformation von - naja, eigentlich Google Tabellen zu XML zu LaTeX. Mein Hauptproblem ist das: Wie man Ampersands von einem Ende zum anderen durchläuft.Ampersand, XSLT und LaTeX

Ich weiß, dass ähnliche Fragen schon mehrmals beantwortet wurden, aber es scheint keine funktionierende Lösung zu geben. (Die beste Hilfe scheint mir das bisher: xslt 2.0 how replace $ by escaped dollar (for conversion to LaTeX))

Angenommen, ich habe den Verlag "Simon & Schuster" in Google Tables. Nachdem ich es exportieren und in XML importieren es ist:

<xml> 
    <name> 
    <publisher>Simon &amp; Schuster</publisher> 
    </name> 
</xml> 

Jetzt in LaTeX ich einen neuen Befehl vorbereitet, so das Ampersand-Problem zu minimieren:

\newcommand{\ampersand}{\&} 

Als ich das bekommen XSLT (2.0) ist es bekommen (zu) heikel:

<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> 

weil das nicht kompiliert wird (Saxxon 9.6). Das Problem ist natürlich das Ampersand: Syntax Error Escape Zeichen nicht erlaubt.

habe ich versucht, einen anderen Ansatz, auch:

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

Das Problem ist, dass ich nicht die

<xsl:value-of/> 

-command sowie die c nicht verwenden können, ist verarbeitet. Irgendeine Idee, was ich falsch verstanden habe?

Antwort

1

Ich denke, Ihre xsl:function Bedürfnisse wie folgt aussehen:

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

Beachten Sie auch, dass, wenn Sie es nennen, Ihre aktuelle Vorlage publisher ist passend, so dass Sie auf, dass und so der Aufruf der Funktion positioniert werden soll so aussehen ...

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