DOMXPath::__construct には DOMDocument を渡さなきゃならないから、以下はエラーになる。
<?php
$dom = new \DOMDocument();
$dom->loadHTML( "<html>.... 略 ....</html>" );
$xpath = new \DOMXpath( $dom );
$nodes = $xpath->query( "xpath の式" );
foreach( $nodes as $node ) {
// Catchable fatal error: Argument 1 passed to DOMXPath::__construct() must be an instance of DOMDocument...
$_xpath = new \DOMXpath( $node );
$_nodes = $_xpath->query( "別の xpath の式" );
}
なので、ひと手間かけて DOMDocument を作ってやらなければいけない。
<?php
$dom = new \DOMDocument();
$dom->loadHTML( "<html>.... 略 ....</html>" );
$xpath = new \DOMXpath( $dom );
$nodes = $xpath->query( "xpath の式" );
foreach( $nodes as $node ) {
// ひと手間かけて $node を DOMDocument にする
$tmp_dom = new \DOMDocument();
$cloned = $node->cloneNode( true );
$tmp_dom->appendChild( $tmp_dom->importNode( $cloned, true ) );
// これでOK
$_xpath = new \DOMXpath( $tmp_dom );
$_nodes = $_xpath->query( "別の xpath の式" );
}
もうすこし楽に処理したい...