我有一个包含多个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>
但它不起作用。更重要的是,我认为必须有一个更清洁的方法解决这个问题。
答案 0 :(得分: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的用途的名称。