我使用SimpleXML为我的网站上的幻灯片工具添加新图像子项,代码如下:
$xml_toload = $_SERVER['DOCUMENT_ROOT']. '/xml/'.$country.'/compact.xml';
$xml = simplexml_load_file($xml_toload); //This line will load the XML file.
$sxe = new SimpleXMLElement($xml->asXML());
//In this line it create a SimpleXMLElement object with the source of the XML file.
//The following lines will add a new child and others child inside the previous child created.
$image = $sxe->addChild('image');
$image->addAttribute('imageURL',$file);
$image->addAttribute('thumbURL',$file);
$image->addAttribute('linkURL',$linkurl);
$image->addAttribute('linkTarget',$linkurl);
$image->addChild('caption',$caption);
$sxe->asXML($xml_toload);
完美地添加新功能
<image attr="blabla"><caption>imageinfo</caption><image>
孩子,在<imagegallery></imagegalley>
但我有一个严重的问题,我需要这个孩子在<imagegallery>
之后,而不是在标签关闭之前(一个接一个),这使得出现新图像,在最后一个位置imagegallery幻灯片。
所以我添加的最新chid应该在它添加到xml的最后一个之前去,比如
<imagegallery>
<image attr="HEREGOESTHENEWST">
<caption>description</caption>
</image>
<image attr="THEOLDONE">
<caption>description</caption>
</image>
</imagegallery>
任何人都可以帮我一个明确的例子吗? 谢谢,急!
答案 0 :(得分:0)
我建议使用DOM api而不是simplexml。 insertBefore似乎就是你要找的东西。
答案 1 :(得分:0)
SimpleXML不支持这种操作。目前,它只能附加儿童。要在树中的任意位置插入子项,您需要专门DOM和DOMNode::insertBefore()。问题是DOM很冗长并且使用起来很烦人,这就是为什么当我必须做这种事情时,我使用SimpleXML和DOM的混合。结果变成了一个名为SimpleDOM: use DOM methods with SimpleXML grammar的图书馆。
另外,这里有一些我建议作为良好做法的提示:
$xml
。 “XML”是一种标记语言,它是文本。如果我看到$xml
var,我认为它包含文本。$xml_toload
var。它不包含XML,它包含文件路径。因此,应将其命名为$filepath
。addAttribute()
或addChild()
即可。使用数组表示法和/或对象表示法通常更简单。结果脚本:
include 'SimpleDOM.php';
// create an <image/> element
$image = new SimpleXMLElement('<image/>');
$image['imageURL'] = $file;
$image['thumbURL'] = $file;
$image['linkURL'] = $linkurl;
$image['linkTarget'] = $linkurl;
$image->caption = $caption;
// load the file
$path_to_file = $_SERVER['DOCUMENT_ROOT']. '/xml/'.$country.'/compact.xml';
$imagegallery = simpledom_load_file($path_to_file);
// insert the new element before the first <image/>
$imagegallery->insertBefore($image, $imagegallery->image[0]);
// save the file
$imagegallery->asXML($path_to_file);