迭代XSLT 1.0中的返回节点集

时间:2015-05-29 10:14:11

标签: xslt xslt-1.0

关于使用xslt 1.0 Display X distinct random node sets using XSLT 1.0

返回一组随机节点集的问题

使用此代码:

  <msxsl:script language="JScript" implements-prefix="my">function random() {
    return Math.random();
    }</msxsl:script>

  <xsl:template match="/">
    <output>
      <xsl:call-template name="pick-random">
        <xsl:with-param name="node-set" select="NewDataSet/Vehicle"/>
        <xsl:with-param name="quota" select="5"/>
      </xsl:call-template>
    </output>
  </xsl:template>

  <xsl:template name="pick-random">
    <xsl:param name="node-set"/>
    <xsl:param name="quota"/>
    <xsl:param name="selected" select="dummy-node"/>
    <xsl:choose>
      <xsl:when test="count($selected) &lt; $quota and $node-set">
        <xsl:variable name="set-size" select="count($node-set)"/>
        <xsl:variable name="rand" select="floor(my:random() * $set-size) + 1"/>
        <xsl:call-template name="pick-random">
          <xsl:with-param name="node-set" select="$node-set[not(position()=$rand)]"/>
                    <xsl:with-param name="quota" select="$quota"/>
                    <xsl:with-param name="selected" select="$selected | $node-set[$rand]"/>
        </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
        <xsl:copy-of select="$selected"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

返回看起来有点像这样的xml:

<output>
    <Vehicle>
       <make>something</make>
       <model>something else</model>
       <price>lots</price>
    </Vehicle>
    <Vehicle>
       <make>something</make>
       <model>something else</model>
       <price>lots</price>
    </Vehicle>
    <Vehicle>
       <make>something</make>
       <model>something else</model>
       <price>lots</price>
    </Vehicle>
    <Vehicle>
       <make>something</make>
       <model>something else</model>
       <price>lots</price>
    </Vehicle>
</output>

我很难理解如何迭代这个返回的节点集以将html样式添加到特定节点。

非常感谢Michael原始代码

1 个答案:

答案 0 :(得分:1)

  

现在如何遍历此返回的节点集以添加html样式   到特定节点

而不是:

<xsl:otherwise>
    <xsl:copy-of select="$selected"/>
</xsl:otherwise>
你可以这样做:

<xsl:otherwise>
    <xsl:apply-templates select="$selected"/>
</xsl:otherwise>

然后添加与&#34;特定节点匹配的模板&#34;你想要风格。没有看到预期的结果(至少),很难比具体更具体。