Как работать с xsl:variable, чтобы ее контент считался node-list-ом?

broo

Новичок
Как работать с xsl:variable, чтобы ее контент считался node-list-ом?

Друзья,
при использовании PHP 4 и Sablotron, конструкция следующего вида у меня работает без проблем:

Код:
<xsl:variable name="test">
	<item>la-la-la</item>
	<item>be-be-be</item>
</xsl:variable>

<xsl:for-each select="$test/item">
	<xsl:value-of select="text()" />
</xsl:for-each>
Когда я пытаюсь использовать подобное в PHP 5, в строке с xsl:for-each получаю ошибку типа "Invalid type". Догадываюсь, что проблема может быть в том, что содержимое $test не node-list.

Подскажите как решить проблему.
Спасибо.
 

slach

Новичок
=)
это ктстаи не по стандарту

правильно в php5 и libxslt это решается через libexslt

а точнее
PHP:
<!--обрати внимание на новый namespace  exsl и как от него избавляются, про libexslt читай в мануале php расширения XSL -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common"  extension-element-prefixes="exsl">


<xsl:variable name="test">
	<item>la-la-la</item>
	<item>be-be-be</item>
</xsl:variable>
<!-- обрати внимание на exsl:node-set($test) -->
<xsl:for-each select="exsl:node-set($test)/item">
	<xsl:value-of select="text()" />
</xsl:for-each>
 

broo

Новичок
Спасибо, помогло.

Не по стандарту подобное использование переменных?
 

olpa

Новичок
Не по стандарту подобное использование переменных?
Да. Если значение переменной делается не с помощью "select", то это не node set.

Можно, кстати, выкрутиться так:
PHP:
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:x="x:x:x">
<!-- -->

<x:x>
  <item>la-la-la</item>
  <item>be-be-be</item>
</x:x>

<xsl:variable name="test" select="document('')/xsl:stylesheet/x:x"/>

<xsl:template match="/">
  <xsl:for-each select="$test/item">
    <xsl:value-of select="text()" />
  </xsl:for-each>
</xsl:template>

</xsl:stylesheet>
 
Сверху