首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DomXPath:在DomXPath查询结果中进行搜索?

DomXPath:在DomXPath查询结果中进行搜索?
EN

Stack Overflow用户
提问于 2014-04-12 08:27:44
回答 1查看 1.9K关注 0票数 3

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

我查询我的文档以查找带有类menu-item的最后一个<li>

代码语言:javascript
复制
$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来查找以下内容:

代码语言:javascript
复制
$p = $xpath->query( "//p[contains(concat(' ', normalize-space(@class), ' '), 'field-description')]" )->item( 0 );

具有类field-descriptionp标记。这不起作用,并返回找到的第一个实例,如果我修改它并使用[last()] (无论这是什么),它就会起作用,但它不一定是这里的最佳解决方案:

代码语言:javascript
复制
$p = $xpath->query( "(//p[contains(concat(' ', normalize-space(@class), ' '), 'field-description')])[last()]" )->item( 0 );

上面的代码行得通,但是我想再次查询$li中的内容,而不是整个文档。

EN

回答 1

Stack Overflow用户

发布于 2014-04-12 08:48:06

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

代码语言:javascript
复制
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)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23024640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档