2

我有一个来自 C# 的逗号分隔列表,我在 XSLT 中对其进行解析并将其加载为下拉列表。用户从下拉列表中选择选项并提交页面后,如果页面中未填写其他字段,我尝试使用此下拉列表的选定选项重新加载页面。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template name="parseString">
<xsl:param name="list"/>
<xsl:if test="contains($list, ',')">
  <xsl:element name="option">
    <xsl:attribute name="value">
      <xsl:value-of select="substring-before($list, ',')"/>
    </xsl:attribute>
    <xsl:value-of select="substring-before($list, ',')"/>
    <xsl:if test="substring-before($list, ',')=$carrier">
      : sel value
      <xsl:attribute name="SELECTED"></xsl:attribute>
    </xsl:if>        
  </xsl:element>
  <xsl:call-template name="parseString">
    <xsl:with-param name="list" select="substring-after($list, ',')"/>
  </xsl:call-template>
</xsl:if>

但是在重新加载时,下拉列表中的选定值不会保持不变。但我可以看到符合条件并显示的文本 - 'sel value'。例如,在图像中,您可以看到运营商的文本 - Metro PCS。

任何帮助,将不胜感激。

谢谢。 你可以在这里找到图片

编辑:我已经为选定的属性尝试了多种方法,例如

<xsl:attribute name="SELECTED"></xsl:attribute>
<xsl:attribute name="SELECTED">True</xsl:attribute>
<xsl:attribute name="SELECTED">selected</xsl:attribute>

它们似乎都不起作用。

4

1 回答 1

2

尝试交换这两行:

  : sel value
  <xsl:attribute name="SELECTED"></xsl:attribute>

成为

  <xsl:attribute name="SELECTED"></xsl:attribute>
  : sel value

我认为您正在尝试向“:sel value”文本节点添加一个显然不起作用的属性。

编辑

仔细查看您的模板,我认为这是上面建议的问题(向文本节点添加属性)。尝试这个:

<xsl:element name="option">
    <xsl:attribute name="value">
      <xsl:value-of select="substring-before($list, ',')"/>
    </xsl:attribute>

    <xsl:if test="substring-before($list, ',')=$carrier">
      <xsl:attribute name="SELECTED"></xsl:attribute>
      : sel value
    </xsl:if>        
    <xsl:value-of select="substring-before($list, ',')"/>
  </xsl:element>

当您的 if 为 true 时,它​​会尝试向 value-of 添加的文本节点添加一个属性。您的所有属性添加都需要在添加任何子节点之前进行,无论是文本还是其他。

于 2013-07-15T18:54:45.597 回答