在XSLT中如何检查当前节点的父节点是否为根节点?

10
我想在Xslt中检查当前节点的父节点是否为根节点。我该如何做? 请指导我解决这个问题...
谢谢和问候, P.SARAVANAN

好问题,+1。请查看我的答案,其中包含XPath 1.0和XPath 2.0中的正确解决方案。 - Dimitre Novatchev
2个回答

9

在XPath 1.0(XSLT 1.0)中:

not(parent::*)

或者您可以使用:

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

在XPath 2.0(XSLT 2.0)中:
.. is root()

8
你可以使用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) 给出的代码是可以的,除了消息。根节点(文档节点)的子节点中如果有注释或处理指令,将满足测试但会生成一个虚假的消息。 - Michael Kay
很好的XPath用于识别根元素,+1 - Rudramuni TP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接