0

所以,在给定的网站上:例如有一个 div 元素。我想为页面主要内容的给定子集正确指定 xpath,可在以下位置找到:

<div[@id="content"> otherwise known as <div[3]>

具体来说,我想要第二个水平规则 (hr) 标记和第三个水平规则 (hr) 标记之间的内容的 xpath。我认为应该分别是:

'//div[@id="content"]/hr[2]' **AND** '//div[@id="content"]/hr'

我一直在阅读XPath 教程并试图弄清楚这两个 hr 标签是否是兄弟姐妹,我相信它们是。然而,Python 似乎并没有这样识别它们。我已经尝试了以下所有推导:

"following-sibling" and "preceding:: and not(preceding::)"

以至于我不再知道哪个是哪个,什么是什么。我确实知道我很困惑,并且我相信脚本被以下事实混淆了:第二个感兴趣的小时没有被编号/标识为内容/div中的第三个小时(在编号上不符合逻辑),因为它“应该”是……根据Firebug告诉我的。

底线是:如何正确指定此 xpath?同样,这些水平规则标签对我来说似乎是同级的,所以我认为它会遵循如下结构和前同级结构来指定这两个标签之间的内容。

4

1 回答 1

0

如果您有权访问XPath 2.0函数,则可以使用 intersect 选择两者之间的所有元素:

//hr[2]/following-sibling::node()
intersect
//hr[3]/preceding-sibling::node()

如果您只能访问XPath 1.0函数,则可以使用这个绝妙的解决方法来获得相同的结果:

//hr[2]/following-sibling::node()[
count(.| //hr[3]/preceding-sibling::node()) 
= 
count(//hr[3]/preceding-sibling::node())
]
于 2013-07-12T21:49:24.903 回答