我有这段代码:
$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>
有什么想法吗?!
非常感谢!
答案 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>
这仍然不是你的追随者。