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

Xslt 使用XLST将相邻链接转换为列表,xslt,Xslt,我正在寻找有关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'">

我正在寻找有关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>

但现在我希望能够检测到多个类型为“button”的链接按如下方式组合在一起:

<link type="button" url="/page.html" text="Do something" />
<link type="button" url="/page.html" text="Do something else" />
<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>

输出如下:

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

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

<link type="button" url="/page.html" text="Do something" />
<link type="button" url="/page.html" text="Do something else" />
<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>


请告诉我们您是使用XSLT 1.0还是XSLT 2.0处理器,就像XSLT 2.0对每个相邻的组所做的
应该有所帮助。对不起,我应该在上面声明我使用的是1.0版。对不起,我应该在上面声明我使用的是1.0版,这种方法仍然适用吗?是的,你应该说。XSLT2.0已经推出5年了,现在它正成为标准。XSLT1.0中的分组要复杂得多:如果元素的模板在下一个同级上应用模板,则需要使用同级递归。