PHP DOMDocument:insertBefore,如何使其工作?

PHP DOMDocument:insertBefore,如何使其工作?,php,domdocument,Php,Domdocument,我想在给定元素之前放置一个新的节点元素。我正在使用insertBefore,但没有成功 这是密码 <DIV id="maindiv"> <!-- I would like to place the new element here --> <DIV id="child1"> <IMG /> <SPAN /> </DIV> <DIV id="child2"> <IMG /

我想在给定元素之前放置一个新的节点元素。我正在使用insertBefore,但没有成功

这是密码

<DIV id="maindiv">

<!-- I would like to place the new element here -->

<DIV id="child1">

    <IMG />

    <SPAN />

</DIV>

<DIV id="child2">

    <IMG />

    <SPAN />

</DIV>

/$div是一个新的div节点元素,
//我正在尝试的代码如下所示:
$maindiv->item(0)->parentNode->insertBefore($div$maindiv->item(0));
//Obs:这段代码实际上将新节点放在maindiv之前
//$maindiv对象(DOMNodeList)[5],来自getElementsByTagName('div')
//echo$maindiv->item(0)->nodeName给出'div'
//echo$maindiv->item(0)->nodeValue提供该div“一些随机文本”的正确数据
//在找到解决方案之前,此代码实际上会放置新的$div元素

            $child = $maindiv->item(0);

            $child->insertBefore( $div, $child->firstChild ); 

我不知道这有多大意义,但很好,它起了作用。

从零开始,这似乎也起了作用:

$str = '<DIV id="maindiv">Here is text<DIV id="child1"><IMG /><SPAN /></DIV><DIV id="child2"><IMG /><SPAN /></DIV></DIV>';
$doc = new DOMDocument();
$doc->loadHTML($str);
$divs = $doc->getElementsByTagName("div");
$divs->item(0)->appendChild($doc->createElement("div", "here is some content"));
print_r($divs->item(0)->nodeValue);
$str='这里是文本';
$doc=新的DOMDocument();
$doc->loadHTML($str);
$divs=$doc->getElementsByTagName(“div”);
$divs->item(0)->appendChild($doc->createElement(“div”,“这里有一些内容”);
打印($divs->item(0)->nodeValue);

如果maindiv来自
getElementsByTagName()
,则
$maindiv->item(0)
是id=maindiv的div。因此,您的代码工作正常,因为您要求它将新div放在maindiv之前

要使其按您所希望的方式工作,您需要获得maindiv的孩子:

$dom = new DOMDocument();
$dom->load($yoursrc);
$maindiv = $dom->getElementById('maindiv');
$items = $maindiv->getElementsByTagName('DIV');
$items->item(0)->parentNode->insertBefore($div, $items->item(0));
请注意,如果没有DTD,PHP不会返回带有getElementsById的任何内容。要使getElementsById正常工作,您需要有DTD或指定哪些属性是ID:

foreach ($dom->getElementsByTagName('DIV') as $node) {
    $node->setIdAttribute('id', true);
}

请看我的答案,谢谢!你们让我看得更清楚错误在哪里。非常感谢!你们让我更清楚地看到错误在哪里。
foreach ($dom->getElementsByTagName('DIV') as $node) {
    $node->setIdAttribute('id', true);
}