insertBefore xml php

时间:2016-03-17 12:00:19

标签: php xml dom

第一次来到这里:o)...需要你的帮助,因为这让我疯狂到这么远......对..

我有这个xml结构:

<?xml version="1.0" encoding="UTF-8"?>
<juiceboxgallery galleryTitle="whatever">
    <image imageURL="images/23.jpg" thumbURL="thumbs/23.jpg" linkURL="images/23.jpg" linkTarget="_blank" sourcePath="webadded"></image>
    <image imageURL="images/24.jpg" thumbURL="thumbs/24.jpg" linkURL="images/24.jpg" linkTarget="_blank" sourcePath="webadded"></image>
    ... and so on ...
</juiceboxgallery>

我想在de first before&#39; image&#39;之前插入新元素。在名单上......

正确的做法是什么???

我所有的尝试都是在“juiceboxgallery”之前插入的。或者在结束标签之后。没办法把它放在我想要的地方......

尝试使用getElemtnstByTagName获取第一个图像元素(&#34;图像&#34;) - &gt; item(0)并执行insertBefore($ new_donde,$ first_node)会抛出一个未找到的错误!用这段代码......

$nodo_zero=$doc->getElementsByTagName('image')->item(0);
$doc->insertBefore($nuevo_nodo,$nodo_zero);

..即使在检查我有&#39; X&#39;图像元素:

$images=$doc->getElementsByTagName("image");
echo "<hr>imagenes: ".$images->length."<hr>"; 

..请一些帮助:|

1 个答案:

答案 0 :(得分:2)

必须在父节点上调用insertBefore()和appendChild()等方法。文档本身也是一个节点。所以它有方法并允许添加多个节点,但只有一个元素节点。

在您的情况下,这里有可能的方法。

使用DOMNode::parentNode属性

$nodo_zero = $doc->getElementsByTagName('image')->item(0);
$nodo_zero->parentNode->insertBefore($nuevo_nodo,$nodo_zero);

或者获取juiceboxgallery节点并使用DOMNode::firstChild属性。

$gallery = $doc->getElementsByTagName('juiceboxgallery')->item(0);
$gallery->insertBefore($nuevo_nodo, $gallery->firstChild);