我正在尝试使用XPath查询在维基百科页面上选择几个元素。
我想要的是类"mw-parser-output"<div>
的所有子级,它们位于页面的"引用"部分之前,该部分从<h2>
元素开始,该元素是ID为"References"的<span>
元素的父级
换句话说,
.
.
.
<!-- EVERYTHING FROM HERE -->
<div class="mw-parser-output">
<p class="mw-empty-elt">
</p>
.
.
.
<ul>
.
<li>
.
<a href="/wiki/List_of_Yale_University_people" title="List of Yale University people">List of Yale University people</a>
</li>
</ul>
<!-- TO HERE, WHERE THE REFERENCES START -->
<h2>
<span class="mw-headline" id="References">References</span>
</h2>
.
.
</div>
.
.
我已经弄清楚了如何用//span[@id='References']/ancestor::h2
选择我不想要的第一个元素,以及我不想要//h2/span[@id='References']
的范围,以及如何选择"mw-parser-output"的所有子元素不是那个特定的元素//div[@class = 'mw-parser-output']/*[not(span[@id='References']/ancestor::h2)]
。
但是,使用这些查询来创建我想要的查询一直是一个挑战。例如,此 XPath 查询不会在 Google Chrome//div[@class = 'mw-parser-output’]/*[following-sibling::h2/span[@id [.eq ’References’]]]
中产生结果。
我正在使用Google Chrome来测试这些查询,但我的最终目标是在R中使用xpathSApply提取元素。
如果有人/无法重现这些问题或看到我出错的地方,我将非常感谢一些指导。
看起来我想使用following-sibling
轴而不是preceding-sibling
.下面的 XPath 与其他答案的区别仅在于使用following-sibling
,给出了所需的结果。
//div[@class='mw-parser-output']/*[count(following-sibling::h2//span[.='References'])>0]
结果是类mw-parser-output
的div
的所有子级,这些子级位于 idReferences
的span
元素的父级h2
之前