DOMDocument: createElement до того, как найден первый случайный тег

У меня есть этот код:

$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>

Есть идеи?!

Большое спасибо!

1

Решение

Если у вас есть родительский узел этих двух элементов —

$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>

Который все еще не то, что вы после.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector