0

我正在寻找有关 XSLT 转换的帮助。

我目前正在转换与格式匹配的链接:

<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>

有人可以帮忙吗?

谢谢,C。

4

1 回答 1

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>
于 2012-07-03T08:59:24.903 回答