我正在尝试将“已选择”属性添加到<option>
。我尝试了各种各样的方法,但我无法让它发挥作用。这就是我正在尝试的方式:
<xsl:for-each select="page/index/values/albums">
<option>
<xsl:attribute name="value"><xsl:value-of select="id" /></xsl:attribute>
<xsl:if test="page/index/values/album = id">
<xsl:attribute name="selected">selected</xsl:attribute>
</xsl:if>
<xsl:value-of select="name" />
</option>
</xsl:for-each>
<xsl:if />
的正确形式是什么?
修改
我的XML文件:
<page>
<index>
<values>
<album>2</album>
<albums>
<id>1</id>
<name>Album #1</name>
</albums>
<albums>
<id>2</id>
<name>Album #2</name>
</albums>
</values>
</index>
</page>
输出:
<option value="1">Album #1</option>
<option value="2" selected="selected">Album #2</option>
答案 0 :(得分:2)
您使用的XPath不正确:
<xsl:if test="page/index/values/album = id">
应该是:
<xsl:if test="../album = id">
您处于不同albums
个节点的上下文中,因此您需要在获取values
的值之前转到父节点album
。
或者,你需要root你的XPath:
<xsl:if test="/page/index/values/album = id">
答案 1 :(得分:1)
测试条件应为:
id = ../album
修改:现在使用所需的输出,请使用此样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="values">
<select>
<xsl:apply-templates select="albums"/>
</select>
</xsl:template>
<xsl:template match="albums">
<option value="{id}">
<xsl:apply-templates/>
</option>
</xsl:template>
<xsl:template match="id"/>
<xsl:template match="id[.=../../album]">
<xsl:attribute name="selected">selected</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
输出:
<select>
<option value="1">Album #1</option>
<option value="2" selected="selected">Album #2</option>
</select>
答案 2 :(得分:0)
您添加属性的表单是正确的,但正如@Alejandro指出的那样,您的if测试条件可能是错误的。特别是“=”的左侧。这些XPath表达式与上下文节点相关,即page/index/values/albums
。