0

私はxsltナビゲーションを持っています.2列に分割したいので、6つの「li」ごとに新しい「div」を作成します...次のように出力したいと思います:

<ul>
<div class="col">
    <li><a href="#">link</a></li>
    <li><a href="#">link</a></li>
    <li><a href="#">link</a></li>
    <li><a href="#">link</a></li>
    <li><a href="#">link</a></li>
    <li><a href="#">link</a></li>
</div>
<div class="col">
    <li><a href="#">link</a></li>
    <li><a href="#">link</a></li>
    <li><a href="#">link</a></li>
    <li><a href="#">link</a></li>
    <li><a href="#">link</a></li>
    <li><a href="#">link</a></li>
</div>
</ul>

しかし、これを行う方法がよくわかりません

私のXSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

  <xsl:output method="xml" omit-xml-declaration="yes" indent="yes"  encoding="utf-8" />
  <xsl:param name="html-content-type" />
  <xsl:template match="/NavigationTree">

    <xsl:if test="count(//Page) > 0">
      <ul>
        <xsl:apply-templates select="Page">
          <xsl:with-param name="depth" select="1"/>
        </xsl:apply-templates>
      </ul>
    </xsl:if>

  </xsl:template>

  <xsl:template match="//Page">
    <xsl:param name="depth"/>

    <li>
      <xsl:attribute name="class">
        <xsl:if test="@InPath='True'">inpath </xsl:if>
        <xsl:if test="position() = 1">firstitem </xsl:if>
        <xsl:if test="position() = count(//Page)">lastitem </xsl:if>
        <xsl:if test="@Active='True'">selected</xsl:if>
      </xsl:attribute>
      <a>
        <xsl:attribute name="class">
          <xsl:if test="@InPath='True'">inpath </xsl:if>
          <xsl:if test="position() = 1">firstitem </xsl:if>
          <xsl:if test="position() = count(//Page)">lastitem </xsl:if>
          <xsl:if test="@Active='True'">current</xsl:if>
        </xsl:attribute>
        <xsl:attribute name="href"><xsl:value-of select="@FriendlyHref" disable-output-escaping="yes"/></xsl:attribute>
        <xsl:value-of select="@MenuText" disable-output-escaping="yes"/>
      </a>
        <div class="icon">
        <xsl:text disable-output-escaping="yes"><![CDATA[<!--dsfdsfdsf-->]]></xsl:text>
      </div>
        <xsl:if test="count(Page)">
          <ul class="M{@AbsoluteLevel}">
            <xsl:apply-templates select="Page">
              <xsl:with-param name="depth" select="$depth+1"/>
            </xsl:apply-templates>
          </ul>
        </xsl:if>
    </li>
  </xsl:template>

</xsl:stylesheet>
4

1 に答える 1

0

それを行う方法は、6 つのPage要素ごとに一致するテンプレートを用意することです。

<xsl:template match="//Page[position() mod 6 = 1]">
  <div>
    <xsl:apply-templates select="." mode="SecondLevel"/>
    <xsl:apply-templates select="following-sibling::Page[position()&lt;6]" mode="SecondLevel"/>
  </div>
</xsl:template>

を生成divし、第 2 レベルのテンプレートを現在の要素とそれに続く 5 つの兄弟に適用します。第 2 レベルのテンプレートは、既にお持ちのテンプレートに次のものが追加されたものmodeです。

<xsl:template match="Page" mode="SecondLevel">
  <li>
    <xsl:attribute name="class">
      <xsl:if test="@InPath='True'">inpath </xsl:if>
      <xsl:if test="position() = 1">firstitem </xsl:if>
      <xsl:if test="position() = count(//Page)">lastitem </xsl:if>
      <xsl:if test="@Active='True'">selected</xsl:if>
    </xsl:attribute>
    <a>
      <xsl:attribute name="class">
        <xsl:if test="@InPath='True'">inpath </xsl:if>
        <xsl:if test="position() = 1">firstitem </xsl:if>
        <xsl:if test="position() = count(//Page)">lastitem </xsl:if>
        <xsl:if test="@Active='True'">current</xsl:if>
      </xsl:attribute>
      <xsl:attribute name="href">
        <xsl:value-of select="@FriendlyHref" disable-output-escaping="yes"/>
      </xsl:attribute>
      <xsl:value-of select="@MenuText" disable-output-escaping="yes"/>
    </a>
    <div class="icon">
      <xsl:text disable-output-escaping="yes"><![CDATA[<!--dsfdsfdsf-->]]></xsl:text>
    </div>
  </li>
</xsl:template>
于 2013-10-07T14:19:01.720 に答える