DOMDocument:在找到第一个随机标记之前的createElement

时间:2017-10-02 16:56:34

标签: php domdocument

我有这段代码:

$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 个答案:

答案 0 :(得分:0)

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

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

这仍然不是你的追随者。