0
基本上我試圖實現的是用一個頁面中相應的data-src-nodes的內容替換一堆img-nodes的src-attributes的內容,以下一個。xpath-> query的遞歸上下文節點
<html>
<body>
<div id="a">
<img src="" data-src="myValue" />
<img src="" data-src="myValue2" />
</div>
<img src="" data-src="myValue" />
</body>
</html>
我想通過找到一個共同的基節點(在此情況下在div img的節點ID爲一個)來做到這一點,基於該節點
- 包含該值的節點上覆制和#
- 節點檢索值
腳本
<?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-nodes,並執行類似於='// div [@ id =「a」]/img/@ data-src'和= '// div [@ id =「a」]/img/@ src'但我有點擔心,我可能最終會在不同節點的屬性之間複製值)
你說得對。完全忘了那個: - /。 – devrandom