2

我已经创建了一个表单,并且正在通过该表单上传图像,并且我在 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>
4

2 回答 2

2

通过使用addChild要添加新子级的 SimpleXMLElement 的方法。使用您当前的 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', '...');
// ...
于 2013-02-25T08:21:16.647 回答
1

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

添加一个新的子元素: $document->body->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>
于 2013-02-25T08:21:56.567 回答