同一父级中两个孩子之间的正确xpath规范?

时间:2013-07-12 21:02:39

标签: html xpath web-scraping firebug

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

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

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

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

我一直在阅读XPath Tutorial,并试图弄清楚这两个hr标签是不是兄弟姐妹,我相信它们是。但是,Python似乎并没有认识到它们。我尝试过各种推导:

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

到了我不再知道哪个是什么,什么是什么的点。我确实知道我很困惑,我相信剧本因为第二小时的兴趣没有被编号/识别为内容/ div中的第三小时(在逻辑上不符合编号)这一事实而感到困惑。 &#39;应该&#39;根据 Firebug 一直在告诉我的事情。

底线是: 如何正确指定此xpath? 同样,这些水平规则标记似乎是我的兄弟姐妹所以我认为它会跟随像兄弟和兄弟这样的结构previous-sibling指定这两个标签之间的内容。

1 个答案:

答案 0 :(得分: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())
]