2

複数の div を含む xhtml ページがあります。これ:

 <xsl:template match="div[@class = 'toc']">

興味のあるdivを選択します(それらにはすべて順序付けられていないリストが含まれています-ul)。ここで、2 つのレベルの ul 要素を含む div のみを選択したいと思います。

一般に、特定のタイプの子を持つノードを選択するにはどうすればよいですか?

私はこのようなことを試しました:

<xsl:apply-templates select="body/div[@class = 'toc']/ul/li/ul" />

                   ...

<xsl:template match="div[@class = 'toc']/ul/li/ul">    
  <xsl:apply-templates mode="final_template" select="../../.."/> 
</xsl:template>

<xsl:template name="final_template" match="div">
        ...
</xsl:template>

しかし、うまくいきません。さらに、この問題には、私よりもクリーンなアプローチが必要だと思います。

4

1 に答える 1

2

通常、特定の子を持つノードを選択するには:

NodeToSelect[childName]

特定の子孫を持つノードを選択するには:

NodeToSelect[.//descendantName]

状況に応じて、次のパスを試してください。

div[@class = 'toc'][.//ul//ul]

XSLT の場合、これはおそらく良い方法です。

<xsl:apply-templates select="body/div[@class = 'toc'][.//ul//ul]" mode="twoUlDescendants" />

                   ...

<xsl:template match="div" mode="twoUlDescendants">    
   <!-- Work with div here. -->
</xsl:template>

モードの名前「twoUlDescendants」を、これらの特定の div の目的をより正確に表す名前に変更できます。

于 2013-01-08T20:06:19.387 に答える