【问题标题】:Simple HTML DOM parser not updating简单的 HTML DOM 解析器不更新
【发布时间】:2023-06-02 11:18:01
【问题描述】:

我正在为自己的模板系统使用简单的 HTML DOM 解析器,但发现了一个问题。

这是我的标记:

<div class=content>
    <div class=navigation></div>
</div>

我将 div.navigation 替换为自己的内容,例如:

$navi= $dom->find("div.navigation",0);
$navi->outertext = "<a class=aNavi>click me!</a>";

效果很好 - 我可以回显它,但问题是 - 在回显之前,我仍然想使用解析器访问/操作该链接,但解析器找不到它。

$link = $dom->find("a.aNavi");

将返回 null :(

似乎在更改外部文本后需要刷新/更新解析器 - 如果可能的话有什么想法吗?

【问题讨论】:

  • 因为您的 a.aNavi 不在 DOM 中。它只是单独对象(或实例)的一些元素。
  • 但它在源代码中......我该如何解决它?
  • $dom 到底是什么?它似乎不是DOMDocument,因为该类没有find() 方法或outertext 属性。
  • @drrcknlsn:我认为 OP 使用的是 simplehtmldom.sourceforge.net 而不是 DOMDocument

标签: php simple-html-dom domparser


【解决方案1】:

我在the API reference 中没有看到任何类似于createElement 的方法,这意味着文档不完整或者您使用了错误的工具来完成这项工作。

我建议使用DOMDocumentDOMDocument::createElement() 方法。但是,如果您对使用 Simple HTML DOM Parser 很执着,您可以试试这个技巧:

$navi = $dom->find('div.navigation', 0);
$navi->outertext = '<a class="aNavi">click me!</a>';
$dom = $dom->save();
$dom = str_get_html($dom);
$link = $dom->find('a.aNavi');

【讨论】:

  • 是的,我已经这样做了,但它很脏 :) 因为我还处于起步阶段,我想使用 DOMDocument 会更好 - 谢谢!