如何制作重复的xml节点并在其中保存不同的值而不覆盖

时间:2013-02-25 08:09:45

标签: php xml

我创建了一个表单,我正在通过该表单上传图像,我在XML文件中创建了一个节点,我想在该文件中保存图像的名称,所有的东西都在工作,但每当我上传新的图片时只需要替换旧的文件名,如果我再上传一张图片就可以了,那么它应该自动再创建一个节点,然后动态添加图像名称,而无需替换旧版本。

我使用的表格:

<div id="popup_box_slider_image" class="Add-Social-Media">
<!-- OUR PopupBox DIV-->
<a id="popupBoxClosesliderImage"  class="ClosePopup"></a>
<form id="addEditFormSelectTemplate" action="" method="post"  enctype="multipart/form-data" >
<p>Please upload a image to add to slider.</p>
<br />
<div style="width:100%; float:left;">
<br/>

上传图片:

<input type="file" name="sliderImage" id="slider" value="" style="width:180px;" class="field-box"  />
<br />
<span id="sliderImageErr">&nbsp;</span>
<br/>
<br/>
<br/>
<div align="left">
<input type="submit" name="SelectsliderImage" onClick="return validatesliderImage();"  value="Update" style="background-color:#2D69A9 ; color:#FFFFFF ; padding-top:5px; padding-bottom:5px; padding-right:10px; padding-left:10px; border:none ; cursor:pointer ; border-radius:5px; " />
</div>
</div>
</form>
</div>

我使用的PHP代码:

$sliderimagename=$_FILES['sliderImage']['name'];
$xmlpath=SITE_URL."xml/".$_SESSION['username']."/test.xml";
$document=simplexml_load_file($xmlpath);
$document->body->sliderimage = $sliderimagename;
$document->asXML($xmlpath);
$path=SITE_URL."/slider_images/";
move_uploaded_file($_FILES['sliderImage']['tmp_name'],$path.$sliderimagename);

XML节点结构:

<body>
    <title>changeBg</title>
    <imagename>B4.jpg</imagename>
    <sliderimage></sliderimage>
</body>

2 个答案:

答案 0 :(得分:2)

通过使用SimpleXMLElement的addChild方法,您想要添加新的子项。 使用当前的xml结构,它看起来像这样:

//...
$document=simplexml_load_file($xmlpath);
$new_image = $document->body->addChild('sliderimage', $_FILES['sliderImage']['name']);

这将导致xml输出如下:

<body>
    <title>changeBg</title>
    <imagename>B4.jpg</imagename>
    <sliderimage></sliderimage>
    <sliderimage></sliderimage> <!-- this is the newly created node -->
</body>

但是你可能想要重新构建你的xml文件,以便你可以有更多级别的嵌套,例如:

<body>
    <file> <!--- new top level tag to group the individual images -->
        <title>changeBg</title>
        <imagename>B4.jpg</imagename>
        <sliderimage>old image</sliderimage>
    </file>
    <file>
        <!--- ... -->
        <sliderimage>new image</sliderimage>
    </file>
</body>

在这种情况下,您只需在返回的节点上多次调用addChild,如下所示:

$new_file = $document->body->addChild('file'); // adding a new <file> node
$new_file->addChild('title', 'some title'); // adding more nodes inside the new <file> node
$new_file->addChild('imagename', '...');
// ...

答案 1 :(得分:1)

http://www.php.net/manual/en/simplexmlelement.addchild.php

添加一个新的子元素: $ document-&gt; body-&gt; addChild('sliderimage',$ sliderimagename);

<body>
<title>changeBg</title>
<imagename>B4.jpg</imagename>
<sliderimage>First</sliderimage>
<sliderimage>Second</sliderimage>
</body>
但是,您应该更改xml以指示有一组可用的项目

<body>
<title>changeBg</title>
<imagename>B4.jpg</imagename>
<sliderimages>
    <image>First</image>
    <image>Second</image>
</sliderimages>
</body>