簡體   English   中英

DomXPath:在DomXPath查詢結果中搜索嗎?

[英]DomXPath: Search inside DomXPath query result?

如何查詢子元素的xpath結果,而無需再次查詢整個文檔?

我查詢我的文檔以找到最后一個<li>類class 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 );

具有類field-description p標簽。 這不起作用並返回找到的第一個實例,如果我對其進行修改並使用[last()] (無論這是什么),則它可以工作,但不一定是這里的最佳解決方案:

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

上面的行有效,但是我想在$li內部而不是整個文檔中再次查詢。

query 的第二個參數contextnode ,它將搜索限制在該節點內。 但是,如果使用絕對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: 阿爾夫·伊頓

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM