【问题标题】:Changing Specific DOM Node PHP更改特定的 DOM 节点 PHP
【发布时间】:2015-04-16 01:59:16
【问题描述】:

我有以下代码:

$item = "What I have: <a href='/id/blablabla'>This $oldtext.</a>";
$dom = new DOMDocument;
$dom->loadHTML($item);
foreach ($dom->getElementsByTagName('a') as $node) {
    if(strpos($node->getAttribute('href'),'/id/') !== false) {
         $oldtext = // ?
         $newtext = "This is old:".$oldtext."And this is new: New.";
         // then replace 'This $oldtext.' in $item as $newtext
    }
}

这会检查我的$item 中的任何节点是否具有包含/id/ 的href。如果他们这样做了,他们应该保存当前文本,称为节点的$oldtext,然后用新文本替换文本,这将使用@987654324 @ 在新文本中。

编辑:为了清楚起见,我添加了 $item 的外观。

如何在节点发生变化的情况下保存$oldtext,并更改节点本身?

【问题讨论】:

  • 也许我不关注但你不能只做 $oldtext = $node->getAttribute('href') 吗?

标签: php dom


【解决方案1】:

如果您指的是它的文本节点,那么只需简单地访问 -&gt;nodeValue 属性。就像任何可访问的对象属性一样覆盖它:

$item = "What I have: <a href='/id/blablabla'>This \$oldtext.</a>";
$dom = new DOMDocument;
$dom->loadHTML($item);
foreach ($dom->getElementsByTagName('a') as $node) {
    if(strpos($node->getAttribute('href'),'/id/') !== false) {
         $oldtext = $node->nodeValue;
         $node->nodeValue = "This is old:".$oldtext."And this is new: New.";
         // then replace 'This $oldtext.' in $item as $newtext
    }
}
echo $dom->saveHTML();

Sample Output

【讨论】:

  • 谢谢,这就是我要找的!
  • @cappycap 我很高兴这有帮助
【解决方案2】:

我认为您需要做的就是使用 $node-&gt;setAttribute('href', $newtext); 替换文本,然后在最后保存 HTML:$dom-&gt;saveHTML();

请参阅下面的完整示例:

    $item = "What I have: <a href='/id/blablabla'>This $oldtext.</a>";
    $dom = new DOMDocument;
    $dom->loadHTML($item);
    foreach ($dom->getElementsByTagName('a') as $node) {
        if(strpos($node->getAttribute('href'),'/id/') !== false) {
             $oldtext = // ?
             $newtext = "This is old:".$oldtext."And this is new: New.";
             // then replace 'This $oldtext.' in $item as $newtext
            $node->setAttribute('href', $newtext);
        }
    }

   $dom->saveHTML();

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
  • 2016-01-24
  • 2012-01-13
  • 2015-06-12
  • 2018-09-12
  • 1970-01-01
  • 2017-09-18
相关资源
最近更新 更多