2011-09-07 82 views

回答

7

您可以使用not(ancestor::*)

使用例:

<xsl:template match="node()|@*"> 
    <xsl:if test="not(ancestor::*)"> 
     <xsl:message>The root element is "<xsl:value-of select="name()"/>".</xsl:message> 
    </xsl:if> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
    </xsl:template> 
+5

两个限定条件:(a)对于XSLT 1.0来说这是可以的,其中根节点始终是文档节点;对于2.0而言,这并不好,其中根节点可能是一个元素节点(或者实际上是一个属性或文本节点)。 (b)给出的代码是确定的,但消息除外。作为根(文档)节点的孩子的评论或处理指令将满足测试,但产生虚假消息。 –

+0

用于识别根元素的好xpath,+1 –

7

在XPath 1.0(XSLT 1.0)

not(parent::*) 

或者你可以使用:

generate-id(..) = generate-id(/) 

在XPath 2.0(XSLT 2.0 )

.. is root() 
相关问题