以下两个xpath表达式之间有区别吗?
child::*
child::node()
我在this游乐场页面上尝试了两个表达式,并得到了相同的结果。
child::*
选择当前节点的所有子元素
child::node()
选择当前节点的所有子节点
但我没什么区别。
答案 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::*
都引用当前节点的子节点,因此,区别实际上是 元素之间的区别 和 节点 。
XPath在其XML模型中具有以下节点类型:
对于您的示例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/a
与child::*
。
相反,如果您考虑使用child::node()
与//h2/*
,那么
//h2/node()
选择一个节点,一个 :
//h2/*
<a href="#">page</a>
选择两个节点,一个 text 节点和一个 element :
//h2/node()