php - 如何使用 DOMDocument 将节点替换为字符串

标签 php replace domdocument

<分区>

Possible Duplicate:
PHP - How to replace a phrase with another?

我需要改造这段html

<html>
   <body>
      Lorum ipsum <a href="http://google.com">click here</a> dolores lorem.
      Lorum ipsum <a href="http://stackoverflow.com">click here too</a> dolores lorem.
   </body>
</html>

收件人:

<html>
    <body>
       Lorum ipsum @@1@@ dolores lorem.
       Lorum ipsum @@2@@ dolores lorem.
    </body>
</html>

这如何使用 Domdocument 实现(我对正则表达式解决方案不感兴趣)?

最佳答案

到目前为止,您还没有显示任何代码,所以不清楚您遇到的是哪个问题。我只能假设这是因为如果您遍历更改它的链接列表,则迭代将变得无效。因此只有第一个元素被替换。

使用 for 循环可以帮助每次迭代只获取第一个元素。它还允许为替换中所需的数字初始化和增加计数变量。

替换本身可以通过 replaceChild 轻松完成.循环示例:

for($c = 1; $a = $doc->getElementsByTagName('a')->item(0); $c++) {
    $a->parentNode->replaceChild(
        $doc->createTextNode(sprintf("@@%d@@", $c)),
        $a
    );
}

调用 $doc->getElementsByTagName('a')->item(0) 将返回 NULL 如果这样的元素不存在(不再存在)。即循环的退出条件。

完整示例:

$html = '<html><body>
  Lorum ipsum <a href="http://google.com">click here</a> dolores lorem.
  Lorum ipsum <a href="http://stackoverflow.com">click here too</a> dolores lorem.
</body></html>';

$doc = new DOMDocument();
$doc->loadHtml($html);

for($c = 1; $a = $doc->getElementsByTagName('a')->item(0); $c++) {
    $a->parentNode->replaceChild(
        $doc->createTextNode(sprintf("@@%d@@", $c)),
        $a
    );
}

echo $doc->saveHTML();

输出:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>
  Lorum ipsum @@1@@ dolores lorem.
  Lorum ipsum @@2@@ dolores lorem.
</body></html>

希望对您有所帮助。

关于php - 如何使用 DOMDocument 将节点替换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13266164/

相关文章:

Javascript 搜索和替换包含方括号的字符序列

java - 使页面的一部分在回发时保持完整

php - COALESCE(SUM(), 0) JOINED 表列与 GROUP BY 不显示所有结果

替换字符串中的单词

r - 用 NA 覆盖 FALSE

java - fatal error - 序言中不允许内容

php - 如何在导出的xml中添加DOCTYPE?

xml - 如何在片段创建中使用全局命名空间定义?

php - 在 php 中创建注册表

php - PDO::fetch() 限制 1