2016-03-31 4 views
0

Я борюсь с чем-то базовым в преобразовании из - ну, собственно, таблицы Google в XML в LaTeX. Моя основная проблема заключается в следующем: как пройти через амперсанды с одного конца на другой.Ampersand, XSLT и LaTeX

Я знаю, что подобные вопросы были даны несколько раз, но, похоже, не существует рабочего решения. (Самая лучшая помощь до сих пор мне кажется: xslt 2.0 how replace $ by escaped dollar (for conversion to LaTeX))

Предположим, у меня есть издательство «Simon & Schuster» в Google Tables. После того, как экспортировать и импортировать его в XML это:

<xml> 
    <name> 
    <publisher>Simon &amp; 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, '\&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> 

Проблема есть, что я не могу использовать

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