如何在PHP中的DOM节点之前和之后插入文本?

时间:2016-11-30 02:35:00

标签: php class dom nodes codeblocks

我正在从dom对象创建一个twig文件,我想在特定div周围添加一个代码块,以便在轨道上我可以在树枝中使用它。

所以现在的html代码就像:

<div>
  <div class="class1 class2">
    <div>
      Some content here
    </div>
  </div>
</div>

我想将其更改为(格式化并不重要):

<div>
  {% block topBar %}
    <div class="class1 class2">
      <div>
        Some content here
      </div>
    </div>
  {% endblock %}
</div>

所以我做了类似的事情:

$pullURL = "http://example.com";
$dom = new DOMDocument('1.0');
$dom->loadHTMLFile($pullURL);
$domx = new DOMXPath($dom);
$topBar = $domx->query("//*[contains(@class, 'class1 class2')]");
$startTopBlock = $dom->createTextNode("{% block topBar %}");
$topBar[0]->insertBefore($startTopBlock, $topBar[0]);

然而,我一直收到消息

  

PHP致命错误:未捕获的异常'DOMException',消息为'Not   在/path/to/file.php:41

中找到错误'

其中第41行是insertBefore代码。

在文本中包装dom对象的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

问题是我需要将其插入父级,因此正确的代码应为:

$topBar[0]->parentNode->insertBefore($startTopBlock, $topBar[0]);

而不是

$topBar[0]->insertBefore($startTopBlock, $topBar[0]);

因为我想在$ topBar [0]之前在父代码中插入此代码。其他一切都是正确的。