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 に答える