Ошибка xslt: дополнительные недопустимые токены: 'eq', '' center '' при преобразовании моего xml через xsl / xslt через xalan / java - PullRequest
1 голос
/ 16 декабря 2011

Я пытаюсь преобразовать мой xml через java / xalan (2.7.1) с помощью org.apache.xalan.xslt.Process class

Я получаю «Дополнительные нелегальные токены» и не уверен в работеоколо

я в основном хочу передать параметр в шаблон и затем использовать этот параметр в качестве атрибута <xsl:when test="$textAlign eq 'center'">

, если я передам параметр 'center' в шаблон TableCell, яЯ хотел бы создать ячейку таблицы, текст которой центрирован, и, конечно, 'left' получит выравнивание по левому краю.

сообщение об ошибке жалуется на 'center'

цитаты вокруг центра приводят его в порядок, и кажется, что все должно быть в порядке.

вот несколько фрагментов (пример xml и xsl)

    <ingredients>         
          <ingredient>
                <quantity>1 1/2</quantity>
                <foodstuff>flour</foodstuff>
          </ingredient>
    </ingredients>

, а вот пример xsl

<xsl:output method="html"/>
<xsl:template match="ingredients">
      <xsl:apply-templates select="ingredient"/>
</xsl:template>
.
<xsl:template match="ingredient">
  <xsl:call-template name="TableCell">
        <xsl:with-param name="cellValue" select="quantity" />
        <xsl:with-param name="textAlign" select="'center'" />
  </xsl:call-template>
</xsl:template>
.
<xsl:template name="TableCell">
  <xsl:param name="cellValue" />
  <xsl:param name="textAlign" />
  <xsl:choose>
      <xsl:when test="$textAlign eq 'center'">
      <td align='center'>
        <xsl:value-of select="$cellValue"/>
      </td>
    </xsl:when>
  </xsl:choose>
</xsl:template>

может есть другой способ сделать это?Я думал, что это было довольно просто, но я думаю, я просто недостаточно разбираюсь в xsl

Я использую xalan 2.7.1 для моего xsl движка

org.apache.xalan.xslt.Process -IN test.xml -XSL test.xsl -OUT out.html

спасибо всем

1 Ответ

4 голосов
/ 16 декабря 2011

eq - это оператор, представленный в XPath и XSLT 2.0, вы используете Xalan, который поддерживает только XPath и XSLT 1.0, поэтому используйте вместо этого оператор =.Или перейдите с Xalan на Saxon 9 (http://saxon.sourceforge.net/),, этот процессор поддерживает XSLT 2.0.

...