xml - child::* 和 child::node() 之间的 XPath 区别

标签 xml xpath

以下两个 xpath 表达式之间有区别吗?

  • child::*
  • child::node()

  • 我在 this 上尝试了这两种表达方式游乐场页面并得到相同的结果。
    W3schools

    child::* Selects all element children of the current node

    child::node() Selects all children of the current node


    但我不明白其中的区别。

    最佳答案

    两者 child::*child::node()指的是当前节点的子节点,所以区别真的在于的区别元素 和一个 节点 .

    元素是一种节点。

    XPath 在其 XML 模型中具有以下节点类型:

  • 元素
  • 属性
  • 正文
  • 命名空间
  • 处理指令 (PI)
  • 评论

  • 对于您的示例 XML/HTML,
    <html>
        <head>
            <title>My page</title>
        </head>
        <body>
            <h2>Welcome to my <a href="#">page</a></h2>
            <p>This is the first paragraph</p>.
            <!-- this is the end -->
        </body>
    </html>
    

    count(//*) = 7 个元素和 count(//node()) = 21 个节点。

    你的游乐场 XPath 是 //h2/a ,这并没有真正说明 child::*对比 child::node() .

    如果您考虑 //h2/*对比 //h2/node() , 然后
  • //h2/*选择单个节点,一个元素:
    <a href="#">page</a>
    
  • //h2/node()选择两个节点,一个文本节点和一个元素:
    Welcome to my
    <a href="#">page</a>
    
  • 关于xml - child::* 和 child::node() 之间的 XPath 区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52045856/

    相关文章:

    xml - XSLT:在两个xsl:for-each循环中提取已知前辈的最新DateTime

    html - 使用 xpath 选择内部带有图像的链接的 href

    python - 使用 python selenium 模块将简历上传到网站

    Xpath 获取具有类别文本的第一个祖先

    xml - 我在哪里可以找到 sapui5 中可用的所有 XML 元素的列表?

    java - 基于角色的 Spring Security 重定向不起作用

    java - 设置SeekBar的宽度使 "swipe to unlock"效果

    java - 使用java将xml转换为xls

    java - 用于计数节点的 XPath 查询

    html - XPath 数字通配符