Php DOMDocument:createElement在找到第一个随机标记之前
我有以下代码:Php DOMDocument:createElement在找到第一个随机标记之前,php,domdocument,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); 结果是: //echo tidy_r
$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);
结果是:
//echo tidy_repair_string($dom->saveHtml(), array('show-body-only' => true));
<p>text 1</p>
<p>text2</p>
<span>Hello</span>
//echo tidy_repair_string($dom->saveHtml(),数组('show-body-only'=>true));
文本1
文本2
你好
但我需要这个:
<span>Hello</span>
<p>text 1</p>
<p>text2</p>
你好
文本1
文本2
有什么想法吗
非常感谢 如果您有这两个元素的父节点-
$dom->documentElement->insertBefore($dom->createElement('span', 'Hello'),$dom->documentElement->firstChild);
因此,我们的想法是在document元素的第一个子元素之前插入新元素
编辑:更完整的例子
<?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();
你好
文本1
文本2
更新:如果你像你说的那样使用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();
$html\u content=“text 1
text2”;
$dom=新的DOMDocument();
$dom->loadHTML(mb\u转换\u编码($html\u内容,'html-ENTITIES','utf-8'),
LIBXML_HTML_noimpled | LIBXML_HTML_NODEFDTD);
echo$dom->saveHTML();
给予-
<p>text 1<p>text2</p></p>
text 1text 2
这仍然不是您所追求的。如果您有这两个元素的父节点-
$dom->documentElement->insertBefore($dom->createElement('span', 'Hello'),$dom->documentElement->firstChild);
因此,我们的想法是在document元素的第一个子元素之前插入新元素
编辑:更完整的例子
<?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();
你好
文本1
文本2
更新:如果你像你说的那样使用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();
$html\u content=“text 1
text2”;
$dom=新的DOMDocument();
$dom->loadHTML(mb\u转换\u编码($html\u内容,'html-ENTITIES','utf-8'),
LIBXML_HTML_noimpled | LIBXML_HTML_NODEFDTD);
echo$dom->saveHTML();
给予-
<p>text 1<p>text2</p></p>
text 1text 2
这仍然不是你想要的。嗨,我想第四只鸟的答案是一样的,但输出是:Hellotext 1。Span应该在之前
标记上方是否有元素-因为XML文档需要有一个顶级元素。如果你没有-它可能使用
标记作为顶级元素。我这样加载代码:@$dom->loadHTML(mb_convert_编码($html_内容,'html-ENTITIES','utf-8')、LIBXML_html_noimpled、LIBXML_html_NODEFDTD)代码>如果你有你需要使用的代码,它会让你的生活变得更加轻松,因为你已经把它包含在你的问题中了。嗨,奈杰尔,谢谢你的帮助。我更新了问题。您的答案几乎正确,但标签并没有出现在开头:Hellotext 1text 2
您好,我认为第四只鸟的答案是相同的,但输出是:Hellotext 1。Span应该在之前标记上方是否有元素-因为XML文档需要有一个顶级元素。如果你没有-它可能使用
标记作为顶级元素。我这样加载代码:@$dom->loadHTML(mb_convert_编码($html_内容,'html-ENTITIES','utf-8')、LIBXML_html_noimpled、LIBXML_html_NODEFDTD)代码>如果你有你需要使用的代码,它会让你的生活变得更加轻松,因为你已经把它包含在你的问题中了。嗨,奈杰尔,谢谢你的帮助。我更新了问题。您的答案几乎正确,但标签没有出现在开头:Hellotext 1text 2
您的示例代码没有生成示例输出,您确定两者都是您所拥有的吗?您好,当然。你到底看到了什么???@salathe你是对的,我更新了问题你的示例代码没有生成示例输出,你确定两者都是你所拥有的吗?嗨,当然。你到底看到了什么???@sala你是对的,我更新了这个问题