2

我有一个包含多个 div 的 xhtml 页面。这:

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

选择我感兴趣的 div(它们都包含无序列表 - ul)。现在我只想选择那些包含两级 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 回答