0

これは私のxsltです:-

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" indent="yes" omit-xml-declaration="yes"/>

  <xsl:template match="*" mode="item">
    <xsl:choose>
      <xsl:when test="self::node()/child::*">
        <li>
          <xsl:value-of select="@value"/>
          <xsl:apply-templates select="current()[*]"/>
        </li>
      </xsl:when>
      <xsl:otherwise>
        <li onclick="final()">
          <xsl:value-of select="@value"/>
          <xsl:apply-templates select="current()[*]"/>
        </li>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <xsl:template match="*/*">
    <ul>
      <xsl:apply-templates select="*[1] | node()[current()/ancestor::*[3]]" mode="item"/>
    </ul>
  </xsl:template>
</xsl:stylesheet>

これは私のxmlです:-

     <?xml-stylesheet type="text/xsl" href="m.xsl"?> 
    <root>
  <child_1 entity_id = "1" value="Game" parent_id="0">
    <child_2 entity_id="2" value="Activities" parent_id="1">
      <child_3 entity_id="3" value="Physical1" parent_id="2">
        <child_6 entity_id="6" value="Cricket" parent_id="3">
          <child_7 entity_id="7" value="One Day" parent_id="6"/>
        </child_6>
      </child_3>
      <child_4 entity_id="4" value="Test1" parent_id="1">
        <child_8 entity_id="8" value="Test At Abc" parent_id="4"/>
      </child_4>
      <child_5 entity_id="5" value="Test2" parent_id="1">
        <child_9 entity_id="9" value="Test At Xyz" parent_id="5"/>
      </child_5>
    </child_2>
   <child_10 entity_id="10" value="Region" parent_id="1">
      <child_11 entity_id="11" value="ABC" parent_id="10">
        <child_12 entity_id="12" value="XYZ" parent_id="11">
          <child_13 entity_id="13" value="ABC123" parent_id="12"/>
        </child_12>
      </child_11>
  </child_10>
</child_1>
</root>

xsltコードの上で実行したときの私の出力は次のとおりです:-

 <ul>
    <li>Activities
    <ul>
        <li>Physical1
        <ul>
            <li>Cricket
            <ul><li onclick="final()">One Day</li>
            </ul>
            </li>
        </ul>
        </li>
    </ul>
    </li>
</ul>

ここで私は次のようなものを出力したい:-

<ul>
    <li>Activities
    <ul>
        <li>Physical1
        <ul>
            <li>Cricket
            <ul><li onclick="final()">One Day</li>
            </ul>
            </li>
        </ul>
        </li>
    </ul>
    </li>
<ul id="last"></ul>
</ul>

質問は:- 次々と作成しulたいli

4

2 に答える 2

1

最後の li の後に ul を取得するには、最後のテンプレートを次のテンプレートに変更してください。

  <xsl:template match="*/*">
    <ul>
      <xsl:apply-templates select="*[1] | node()[current()/ancestor::*[3]]" mode="item"/>
      <xsl:if test="self::*/parent::*/name() ='root'"><ul id="last"></ul></xsl:if>
    </ul>
  </xsl:template>

完全な XSL は次のとおりです。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" indent="yes" omit-xml-declaration="yes"/>

  <xsl:template match="*" mode="item">
    <xsl:choose>
      <xsl:when test="self::node()/child::*">
        <li>
          <xsl:value-of select="@value"/>
          <xsl:apply-templates select="current()[*]"/>
        </li>
      </xsl:when>
      <xsl:otherwise>
        <li onclick="final()">
          <xsl:value-of select="@value"/>
          <xsl:apply-templates select="current()[*]"/>
        </li>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <xsl:template match="*/*">
    <ul>
      <xsl:apply-templates select="*[1] | node()[current()/ancestor::*[3]]" mode="item"/>
      <xsl:if test="self::*/parent::*/name() ='root'"><ul id="last"></ul></xsl:if>
    </ul>
  </xsl:template>
</xsl:stylesheet>
于 2013-04-29T08:57:38.880 に答える
1

@Jack Php: 以下のように、最後のテンプレートに 1 行追加する必要があります。

<xsl:template match="*/*">
   <ul>
      <xsl:apply-templates select="*[1] | node()[current()/ancestor::*[3]]" mode="item"/>
      <xsl:if test="local-name(parent::*) = 'root'"><ul id="last"></ul></xsl:if>
   </ul>
</xsl:template>

についてはこちらからご覧いただけますlocal-name(parent::*)

于 2013-04-29T13:02:23.180 に答える