сюрпризы с условиями XSLT

Alexandre

PHPПенсионер
сюрпризы с условиями XSLT

есть xml
PHP:
<root action="view">
	<channels>
		<id>19</id>
		<name>Ставраполь</name>
		<provider_id>1</provider_id>
	</channels>
<providers>	
	<provider name="AAA" id="2" />
	<provider name="BBB" id="1" />
	<provider name="CCC" id="3" />
</providers>
</root>
Надо вывести селект с показом данного провайдера, т.е. <option> где value = provider_id должен иметь аттрибут selected, т.е в данном примере ВВВ должен быть selected

делаю так:

PHP:
  	   <select name="provider_id" >
	   <option value=""></option>
	   <xsl:for-each select="root/providers/provider">
	   <xsl:element name="option">
		  <xsl:attribute name="value"><xsl:value-of select="@id"/></xsl:attribute>
		  		 <xsl:value-of select="@name"/> 
	  		 <xsl:if test="@id = //root/sale_channels/provider_id">
		  						
		  		 	  		  <xsl:attribute name="selected">1</xsl:attribute>
		  		 </xsl:if>
		</xsl:element>
		<xsl:value-of select="@name"/>
	   </xsl:for-each>
	   </select>
но результатов нет

пробовал через number() - не помогло?
 

chameleon

Новичок
Много способов:
PHP:
<xsl:template name="select">
  <xsl:apply-templates select="/root/providers/provider"/>
</xsl:template>
<xsl:template match="provider">
  <option value="{@id}"><xsl:value-of select="@name"/></option>
</xsl:template>
<xsl:template match="provider[@id=/root/channels/provider_id]">
  <option value="{@id}" selected="selected"><xsl:value-of select="@name"/></option>
</xsl:template>
или так:
PHP:
<xsl:template name="select">
  <xsl:apply-templates select="/root/providers/provider"/>
</xsl:template>
<xsl:template match="provider">
  <option value="{@id}">
  <xsl:if test="@id=/root/channels/provider_id">
        <xsl:attribute name="selected">selected</xsl:attribute>
  </xsl:if>
  <xsl:value-of select="@name"/></option>
</xsl:template>
ну и через for-each
PHP:
<xsl:template name="select">
<select name="provider_id">
       <xsl:for-each select="root/providers/provider">
       <option value="{@id}">
       <xsl:if test="@id = /root/channels/provider_id">
                <xsl:attribute name="selected">selected</xsl:attribute>
        </xsl:if>
        <xsl:value-of select="@name"/>
        </option>
       </xsl:for-each>
</select>
</xsl:template>
 

Alexandre

PHPПенсионер
кто подскажет, чисто теоретически интерестно, почему я так не могу:
Код:
<xsl:if test="@id = //root/channels/provider_id">                                    
                                   <xsl:attribute name="selected">1</xsl:attribute> 
</xsl:if>
почему не могу сравнивать текстовое значение узлов или использовать number()

а через <templates> все получается
 

Alexandre

PHPПенсионер
спасибо огромное

причина в
PHP:
<xsl:attribute name="selected">selected</xsl:attribute>
 
Сверху