gpt4 book ai didi

xml - XPath child::* 与 child::node()

转载 作者:数据小太阳 更新时间:2023-10-29 01:54:19 29 4
gpt4 key购买 nike

我正在处理 XSLT 转换,我发现了一个我无法回答的有趣问题:

child::*child::node() 有什么区别?

我想创建一个条件,在这个条件下我将子元素的数量定为 1,在这种情况下:

<xsl:if test="parent[count(child::*) eq 1])"> 

对比

<xsl:if test="parent[count(child::node()) eq 1])"> 

有什么区别?

最佳答案

要理解XPath中child::*child::node()的区别,不仅要理解*的区别> 和node()节点测试,也是principal node type的概念一个轴...

主节点类型

规则:如果一个轴可以包含元素,那么它的主节点类型元素;否则,它是轴可以包含的节点类型。 (例如attribute轴的principal node typeattribute,因为它只能包含属性。)

轴可以包含元素,所以子轴的主节点类型元素

每个轴的节点测试

因此,child::*child::node() 的区别在于

  • child 轴上的 * 节点测试对所有 child 元素 成功context 节点,因为 * 节点测试成功用于主要节点类型的所有节点(元素,此处)而
  • node() 节点测试对所有节点成功上下文节点,因为 node() 节点测试对所有节点类型 成功。但是,请注意并非所有节点类型都可以位于 child 轴上。下面是七种类型的节点以及它们是否可以出现在子轴上:
    • root:不,根据定义,根不是其他节点的子节点。
    • 元素:是
    • 文本:是
    • attribute:不,属性有自己的轴。
    • 命名空间:不,命名空间有自己的轴。
    • 处理指令:是
    • 评论:是

因此,child::* 匹配上下文节点的所有element 子节点,child::node() 匹配所有< em>上下文节点的元素、文本和处理指令。

关于xml - XPath child::* 与 child::node(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46121524/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com