使用XSLT将相邻链接转换为列表

时间:2012-07-03 08:41:14

标签: xslt

我正在寻找XSLT Tranforms的一些帮助。

我正在转换符合格式的链接:

<link type="button" url="/page.html" text="Do something" />

使用转换:

<xsl:template match="link">
    <a target="_blank" href="{@url}" title="{@text}">
        <xsl:if test="@type='button'">
            <xsl:attribute name="class">btn</xsl:attribute>
        </xsl:if>
        <xsl:value-of select="@text" />
    </a>
</xsl:template>

这给了我输出:

<a class="btn" title="Do Something" href="/page.html" target="_blank">Do Something</a>

但是现在我希望能够检测到具有“按钮”类型的多个链接何时被组合在一起:

<link type="button" url="/page.html" text="Do something" />
<link type="button" url="/page.html" text="Do something else" />

输出如下:

<ul class="btns">
    <li><a href="page.html" title="Do something" target="_blank" class="btn testing">Do something</a></li>
    <li><a href="page.html" title="Do something else" target="_blank" class="btn testing">Do something else</a></li>
</ul>

有人可以协助吗?

谢谢, 下进行。

1 个答案:

答案 0 :(得分:1)

逻辑需要进入链接元素的父模板。假设您正在使用XSLT 2.0,它将是这样的:

<xsl:template match="parent">
  <xsl:for-each-group select="*" group-adjacent="node-name()">
    <xsl:choose>
      <xsl:when test="self::link">
        <ul>
          <xsl:apply-templates select="current-group()"/>
        </ul>
      </xsl:when>
      <xsl:otherwise>
        <xsl:apply-templates select="current-group()"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:for-each-group>
</xsl:template>