簡體   English   中英

xpath-> query的遞歸上下文節點

[英]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-srcdescendant::img/@data-src .//@data-src descendant::img/@data-src等。

暫無
暫無

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

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