如何在 PHP 中的 DOM 节点前后插入文本?
How can I insert text before and after a DOM Node in PHP?
我正在从 dom 对象创建一个 twig 文件,我想在特定的 div 周围添加一个代码块,这样我就可以在 twig 中使用它了。
所以我现在的 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 Fatal error: Uncaught exception 'DOMException' with message 'Not
Found Error' in /path/to/file.php:41
第 41 行是 insertBefore 代码。
用文本包装 dom 对象的最佳方式是什么?
问题是我需要将它插入父级,所以正确的代码应该是:
$topBar[0]->parentNode->insertBefore($startTopBlock, $topBar[0]);
而不是
$topBar[0]->insertBefore($startTopBlock, $topBar[0]);
因为我想在 $topBar[0] 之前的父项中插入此代码。其他一切都是正确的。
我正在从 dom 对象创建一个 twig 文件,我想在特定的 div 周围添加一个代码块,这样我就可以在 twig 中使用它了。
所以我现在的 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 Fatal error: Uncaught exception 'DOMException' with message 'Not Found Error' in /path/to/file.php:41
第 41 行是 insertBefore 代码。
用文本包装 dom 对象的最佳方式是什么?
问题是我需要将它插入父级,所以正确的代码应该是:
$topBar[0]->parentNode->insertBefore($startTopBlock, $topBar[0]);
而不是
$topBar[0]->insertBefore($startTopBlock, $topBar[0]);
因为我想在 $topBar[0] 之前的父项中插入此代码。其他一切都是正确的。