gpt4 book ai didi

php - DomXPath : Search inside DomXPath query result?

转载 作者:行者123 更新时间:2023-12-03 16:11:02 24 4
gpt4 key购买 nike

如何在不再次查询整个文档的情况下查询子元素的 xpath 结果?

我查询我的文档以找到最后一个 <li>同类menu-item :

$doc = new DomDocument();
@$doc->loadHTML( $html );
// $html is invalid (and should be at this point),
// so use @ sign to suppress errors
$xpath = new DomXPath( $doc );
$li = $xpath->query( "(//li[contains(concat(' ', normalize-space(@class), ' '), 'menu-item')])[last()]" )->item( 0 );

上面运行得很好,现在我想查询$li找到以下内容:

$p = $xpath->query( "//p[contains(concat(' ', normalize-space(@class), ' '), 'field-description')]" )->item( 0 );

A p标签类 field-description .这不起作用并返回找到的第一个实例,如果我修改它并使用 [last()] (无论这是什么)然后它就可以工作,但它不一定是这里的最佳解决方案:

$p = $xpath->query( "(//p[contains(concat(' ', normalize-space(@class), ' '), 'field-description')])[last()]" )->item( 0 );

上面的行有效,但我想在$li里面查询不是整个文档。

最佳答案

The second argument querycontextnode,它将搜索限制在该节点内。但是,如果您使用绝对 xpath,query 仍将返回整个文档的节点。

php > $dd = new DomDocument();
php > // deliberately using malformed html.
php > $dd->loadhtml('<html><head><title>wat</title></head><body><div>Hello, <p>world</p></div><div class="container"><p>I like pie</div></body></html>');
php > $xp = new DomXPath($dd);
php > $container = $xp->query('//div[@class="container"]')->item(0);
php > var_dump($xp->query('//p'));
class DOMNodeList#6 (1) {
public $length =>
int(2)
}
php > var_dump($xp->query('//p', $container));
class DOMNodeList#4 (1) {
public $length =>
int(2)
}
php > var_dump($xp->query('p', $container));
class DOMNodeList#5 (1) {
public $length =>
int(1)
}

您可以使用类似 .//x 的模式在上下文节点中递归地匹配所有 x 元素。 (HT: Alf Eaton )

关于php - DomXPath : Search inside DomXPath query result?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23024640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com