У меня есть этот код:
$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>
Который все еще не то, что вы после.
Других решений пока нет …