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

时间:2018-08-27 19:29:59

标签: xml xpath

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

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

我在this游乐场页面上尝试了两个表达式,并得到了相同的结果。

W3schools

  

child::*选择当前节点的所有子元素

     

child::node()选择当前节点的所有子节点

但我没什么区别。

1 个答案:

答案 0 :(得分:2)

dff = pd.DataFrame({'Country':['France']*4+['China']*4, 'Progress':['Develop','Middle','Operate','Start']*2, 'NumTrans':np.random.randint(100,900,8), 'TransValue':np.random.randint(10000,9999999,8)}) dff = dff.set_index(['Country','Progress']).T child::*都引用当前节点的子节点,因此,区别实际上是 元素之间的区别 节点

元素 node 的一种。

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

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

对于您的示例XML / HTML,

child::node()

<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> = 7个元素和count(//*) = 21个节点。

您的游乐场XPath是count(//node()),实际上并没有说明//h2/achild::*

相反,如果您考虑使用child::node()//h2/*,那么

  • //h2/node()选择一个节点,一个

    //h2/*
  • <a href="#">page</a> 选择两个节点,一个 text 节点和一个 element

    //h2/node()