我正在尝试在我的html doc中获取两个css类标记之间的数据。
这里的例子。
<p class="heading10">text text</p>
<p>text text text</p>
<p>text text text</p>
<p class="heading11">text text</p>
<p></p>
<p></p>
我不知道如何在
类heading10和heading11之间获取
数据。
我尝试了//p[@class="heading10"]//following-sibling::p]
,它会在课程标题10之后获取所有<p>
。
答案 0 :(得分:1)
尝试类似
的内容//p[@class="heading10"]/following-sibling::p[position()<count(//p[@class="heading11"]/preceding-sibling::p)]
编辑:
对@jpaugh的更多解释:
OP的xpath在p
之后抓取所有同级class="heading10"
元素。我已将这些元素的position()
限制小于p
元素与class="heading11"
的位置。
以下代码确认使用的是PHP 5.5,并且无法使用php 5.4(感谢@slphp):
$t = '<?xml version="1.0"?>
<root><p class="heading10">text text</p>
<p>text text text</p>
<p>text text text</p>
<p class="heading11">text text</p>
<p></p>
<p></p></root>';
$d = DOMDocument::LoadXML($t);
$x = new DOMXpath($d);
var_dump($x->query('//p[@class="heading10"]/following-sibling::p[position()<count(//p[@class="heading11"]/preceding-sibling::p)]'));
class DOMNodeList#6 (1) {
public $length =>
int(2)
}
请注意,如果<p class="heading10">
不是第一个p
元素,那么您可能需要减去它们:
//p[@class="heading10"]/following-sibling::p[position()<(count(//p[@class="heading11"]/preceding-sibling::p) - count(//p[@class="heading10"]/preceding-sibling::p))]
为了便于阅读,按行拆分:
//p[@class="heading10"]
/following-sibling::p[
position()<(
count(//p[@class="heading11"]/preceding-sibling::p) -
count(//p[@class="heading10"]/preceding-sibling::p)
)
]