代码之家  ›  专栏  ›  技术社区  ›  Cuauh Medina

XPath子节点::*vs子节点::node()

  •  7
  • Cuauh Medina  · 技术社区  · 7 年前

    两者的区别是什么 child::* child::node() ?

    我想创建一个条件,将子元素的数量限定为1,在本例中:

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

    vs

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

    2 回复  |  直到 7 年前
        1
  •  8
  •   kjhughes    6 年前

    了解 child::* child::node() 在XPath中,不仅要理解 * node() principal node type 轴的。。。

    主节点类型

    规则: 如果轴可以包含元素,则其 element ; 否则,它是轴可以包含的节点类型。(例如 attribute 轴为

    这个 child 主节点类型 要素 .

    每个轴的节点测试

    是吗

    • * 上的节点测试 axis为所有人成功 小孩 的 上下文节点,因为 节点测试成功 主节点类型的所有节点 ( ,此处)鉴于
    • 这个 小孩 节点 节点() 所有节点类型 . 但是,请注意,并非所有节点类型都可以位于 轴以下是七种类型的节点,以及它们是否可以出现在子轴上:
      • 要素 :是
      • :是
      • 属性
      • 命名空间 :否,命名空间有自己的轴。
      • 处理指令
      • 议论

    因此 子项::* 全部匹配 要素 元素、文本和处理说明 上下文节点的子节点。

        2
  •  3
  •   zx485 potemkin    7 年前

    引用自 here :

    • * 匹配任何元素
    • node() 匹配除属性节点和根节点之外的任何节点

    child::* 仅匹配子元素和 child::node() 匹配除属性和根节点之外的任何子节点。这可以是七种节点类型中的五种:元素、注释、文本和命名空间节点以及处理指令( see here ).