如何将XSL数据传输到选择范围之外?

时间:2015-01-05 11:00:10

标签: javascript xml xslt

当我试图处理xml文件中的数据时,我遇到了这个问题: 我无法找到一种方法来附加for-each语句中的数据。我想将它们作为参数发送到js函数。

以下是xml的示例:

 <events>
<event>
    <eventType>some type</eventType>
    <date>12/24/1999</date>
    <participants>
        <participant>
            <participant_name>Mike</participant_name>
        </participant>
        <participant>
            <participant_name>John</participant_name>
        </participant>
    </participants>

。 。 。

这是xsl文件:

<xsl:for-each select="event">

<tr>                    

    <xsl:variable name="eventType"select="eventType"> </xsl:variable>

    <xsl:variable name="date" select="date"></xsl:variable>

    <td>    
        <xsl:value-of select="$eventType" />    
    </td>

    <td>
        <xsl:value-of select="$date" /> 
    </td>

    <xsl:for-each select="participants/participant">
    <td>
    <xsl:value-of select="participant_name"/>   
    </td>
    </xsl:for-each>

    <td>
        <button type="button" onClick="myFunc('{$date} {$eventType}')">

    </td>

    </tr>

我的目标是在最后一列是一个将所有行参数发送到js函数的按钮时创建一个表。上面的代码工作正常,但我似乎找不到附加方法的方法participant_name因为其范围。我搜索了一个解决方案并没有找到它。希望在这里找到帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

你非常接近 - 你已经在participant的范围内了,所以你只需要向下导航到participant_name

<xsl:for-each select="participants/participant">
  <td>
    <xsl:value-of select="participant_name" />
  </td>
</xsl:for-each>

修改

我刚刚重新阅读了您的问题,我相信我错过了发送到您的javascript函数的部分?如果是这样,您可以在另一个<xsl:variable>

中建立参与者
<xsl:variable name="participants">
  <xsl:for-each select="participants/participant">
     <xsl:value-of select="participant_name" />
    <xsl:if test="not(position() = last())">
      <xsl:text>,</xsl:text>
    </xsl:if>
  </xsl:for-each>
</xsl:variable>

<button type="button" onClick="myFunc('{$date} {$eventType} {$participants}')" />

最后删除逗号courtesy of here