我想選擇在PHP中使用XPath的表單最接近的標題元素(h1,h2,h3,h4,h5或h6) 。XPath:獲取最接近的標題元素(h1,h2,h3等)
<h2>Foo</h2>
<h3>Bar</h3>
<form>
<input />
</form>
上面的例子應該返回h3(Bar),因爲它最接近表單。
<h4>Kee</h4>
<form>
<input />
</form>
這個例子另一方面應該返回h4(Kee),因爲它是最接近的。
此查詢(來自https://stackoverflow.com/a/2216795/4391251)只適用於h2標籤。我可以修改它爲h1,h3,h4,h5等,但我想要一個全面的查詢。
$headings = $xpath->query('((//form)[2]/ancestor::*/h2[.!=""])[last()]');
基本上,我想是這樣的
$headings = $xpath->query('((//form)['.$i.']/ancestor::*/[h2 or h3][.!=""])[last()]');
除了不返回任何結果,也不認爲(基於https://stackoverflow.com/a/7995095/4391251)
$headings = $xpath->query('((//form)['.$i.']/ancestor::*/[self::h2 or self::h3][.!=""])[last()]');
什麼查詢會給想要的結果?
優秀的前!我結束了這樣的使用: $ headings = $ xpath-> query('((// form)['。$ i。']/preceding-sibling :: * [self :: h2 or self :: h3 ])[1]'); –
你可以發佈重現問題的示例HTML嗎? – har07
* AFAICS *,在這個答案中解釋過,xpath應該只返回* form的第一個*前面的兄弟,它不可能返回多個元素。 – har07