1

我是 XSL 的新手,花了几个小时寻找从 XSLT 中提取属性值的解决方案。

我的 XML 看起来像:

<itemList>
  <item id="1" name="mydoc1"  showItem="option1">My documents1</item>
  <item id="2" name="mydoc1"  showItem="option2">My documents2</item>
  <item id="2" name="mydoc1"  showItem="option1">My documents3</item>
  ...
  <item id="k" name="mydocWhatever"  showItem="option1">My documents Whatever</item>
  ...

  <item id="n" name="mydocN"  showItem="optionN">My documentsN</item>
</itemList>

我想获取所有item.name时间showItem="option1"并将其存储到 JavaScript 数组或对象中。

我试过这个,但它不起作用。

<xsl:for-each select="itemList/item[@showItem = 'option1']"> 
  myItem='<xsl:value-of select="//itemList/item/@name"/>');
</xsl:for-each>

有人对此有解决方案吗?

4

2 回答 2

1
<xsl:text>var myItem = [</xsl:text>
<xsl:for-each select="itemList/item[@showItem = 'option1']">
  <xsl:if test="position() &gt; 1">, </xsl:if>
  <xsl:value-of select="concat(&quot;'&quot;, @name, &quot;'&quot;)"/>
</xsl:for-each>
<xsl:text>];</xsl:text>

应该输出var myItem = ['mydoc1', 'mydoc1', 'mydocWhatever'];

于 2013-04-17T14:28:20.907 回答
1

您的上下文在 内部发生变化<xsl:for-each>,并且由于没有后代<itemlist>s,因此您的选择是空的。

<xsl:for-each select="itemList/item[@showItem = 'option1']"> 
    myItem = '<xsl:value-of select="@name" />' ; 
</xsl:for-each>
于 2013-04-17T14:06:38.867 回答