DOMDocument:在找到第一个随机标签之前创建元素

DOMDocument: createElement before the first random tag found

我有这个代码:

$html_content = '<p>text 1</p><p>text 2</p>';

$dom = new DOMDocument;
@$dom->loadHTML(mb_convert_encoding($html_content, 'HTML-ENTITIES', 'utf-8'), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

我这样创建新元素:

$newtag = $dom->documentElement->appendChild($dom->createElement('span', 'Hello'));

结果是:

//echo tidy_repair_string($dom->saveHtml(), array('show-body-only' => true));

<p>text 1</p>
<p>text2</p>
<span>Hello</span>

但我需要这个:

<span>Hello</span>
<p>text 1</p>
<p>text2</p>

有什么想法吗?!

非常感谢!

如果你有这两个元素的父节点 -

$dom->documentElement->insertBefore($dom->createElement('span', 'Hello'),$dom->documentElement->firstChild);

所以想法是在文档元素的第一个子元素之前插入新元素。

编辑:更完整的示例...

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

$xml= "<body>
<p>text 1</p>
<p>text2</p>
</body>";

$dom = new DOMDocument();
$dom->loadXML($xml);

$dom->documentElement->insertBefore($dom->createElement('span', 'Hello'),$dom->documentElement->firstChild);

echo $dom->saveXML();

给...

<?xml version="1.0"?>
<body><span>Hello</span>
<p>text 1</p>
<p>text2</p>
</body>

更新:如果你像你说的那样使用 HTML...

$html_content= "<p>text 1</p>
<p>text2</p>";

$dom = new DOMDocument();
$dom->loadHTML(mb_convert_encoding($html_content, 'HTML-ENTITIES', 'utf-8'),
                LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

echo $dom->saveHTML();

给予 -

<p>text 1<p>text2</p></p>

这还不是你想要的。