[英]Recursive context nodes for xpath->query
基本上,我想要實現的是用類似於下一頁的頁面中相應的data-src-nodes的內容替換一堆img-nodes的src-attributes的內容。
<html>
<body>
<div id="a">
<img src="" data-src="myValue" />
<img src="" data-src="myValue2" />
</div>
<img src="" data-src="myValue" />
</body>
</html>
我想通過找到一個公共基礎節點(在這種情況下,是id為a的div中的img節點)並基於該節點來完成此操作
腳本
<?PHP
$html = '<html><body><div id="a"><img src="" data-src="myValue"/><img src="" data-src="myValue2"/></div><img src="" data-src="myValue"/></body></html>';
$doc = new DOMDocument();
@$doc->loadHTML($html);
$basenode = false;
$xpath = new DOMXPath($doc);
$entries = $xpath->query('(//div[@id="a"])');
if ($entries->length > 0) $basenode = $entries->item(0);
if ($basenode) {
$img = $xpath->query('//img', $basenode);
foreach ($img as $curImg) {
$from = $xpath->query('//@data-src', $curImg);
$to = $xpath->query('//@src', $curImg);
$to->item(0)->value = $from->item(0)->value;
}
echo $doc->saveXML();
}
?>
預期產量
<html>
<body>
<div id="a">
<img src="myValue" data-src="myValue" />
<img src="myValue2" data-src="myValue2" />
</div>
<img src="" data-src="myValue" />
</body>
</html>
實際產量
<html>
<body>
<div id="a">
<img src="myValue" data-src="myValue" />
<img src="" data-src="myValue2" />
</div>
<img src="" data-src="myValue" />
</body>
</html>
所以,線
$from = $xpath->query('//@data-src', $curImg);
似乎實際上是基於根節點而不是之前選擇的img節點進行搜索。 我該如何解決?
(我知道,可能的解決方法是省略顯式選擇img節點,並執行類似from ='// div [@ id =“ a”] / img / @ data-src'和to ='// div [@ id =“ a”] / img / @ src',但我有點擔心,我可能最終會在不同節點的屬性之間復制值)
/
開頭指定絕對位置路徑(即從文檔根目錄開始)。 相反,您想使用相對的 (相對於上下文節點)。
例如; .//@data-src
或descendant::img/@data-src
.//@data-src
descendant::img/@data-src
等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.