XSLT параметр не работает - PullRequest
       13

XSLT параметр не работает

0 голосов
/ 09 ноября 2011

Я использую XSLT Transformer в Java.Я уверен, что проблема в том, как я печатаю в синтаксисе XSLT.

По сути, я должен посмотреть, эквивалентен ли атрибут 'id' в одном из узлов XML значению,XSL должен обработать шаблон.Мне нужно передать это тестовое значение как xsl: param.Когда я тестирую его на статическом значении, оно работает круто:

<ul class="levelOneNav">
 <xsl:for-each select="level1[@id='sub-page-1']">
  <xsl:call-template name="level1"/>
  </xsl:for-each>
 <div class="clear"></div>
</ul>       

Часть теста находится во второй строке выше.AFAIK, чтобы вставить параметр внутри строк, формат <xsl:for-each select="level1[@id='$ContentID']">, в котором $ContentID это xsl: param, объявленный как <xsl:param name="ContentID"/>

Так что это код, который я набираю

<ul class="levelOneNav">
 <xsl:for-each select="level1[@id='$ContentID']">
  <xsl:call-template name="level1"/>
  </xsl:for-each>
 <div class="clear"></div>
</ul>       

но это не работает.Я также пытался использовать <xsl:for-each select="level1[@id='{$ContentID}']">, и он также не работает.

Любой совет очень ценится.Пожалуйста, дайте мне ссылки, если вы чувствуете, что я должен чему-то научиться.Спасибо за ваше время ...

Ответы [ 2 ]

1 голос
/ 09 ноября 2011

Нет, это «AFAIK», где вы не правы.Некоторые строковые значения в XSLT-атрибутах , безусловно, принимают синтаксис "{$param}" (обратите внимание на фигурные скобки), но в вашем случае то, что вам нужно, гораздо проще: @id=$ContentID

РЕДАКТИРОВАТЬ: Примечаниечто '{$ param}' применяется для атрибутов XSLT , см. пример:

<xsl:element name="{$namespace}:{$elementName}">
   <xsl:attribute name="{$attrName}"><xsl:value-of select="$value"/></xsl:attribute>
</xsl:element>
0 голосов
/ 09 ноября 2011

1001 * попробовать *

<ul class="levelOneNav">
<xsl:variable name="contentID" select="'sub-page-1'" />
 <xsl:for-each select="level1[@id=$ContentID]">
  <xsl:call-template name="level1"/>
  </xsl:for-each>
 <div class="clear"></div>
</ul>

переменная или параметр будут работать так же. будьте осторожны, вы должны удалить простую цитату около $ContentID. другие вещи, если level1/@id уникален, вам не нужен foreach.

ниже примера для отправки переменной в качестве параметра.

<ul class="levelOneNav">
    <xsl:variable name="contentID" select="'sub-page-1'" />
     <xsl:for-each select="level1[@id=$ContentID]">
      <xsl:call-template name="level1" >
           <xsl:with-param name="foo" select="$ContenID" />
      </xsl:call-template>
      </xsl:for-each>
     <div class="clear"></div>
</ul>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...