PHP在现有XML文件上添加子项和属性

时间:2015-10-28 07:22:01

标签: php xml attributes simplexml

我一直在阅读关于SimpleXML和其他一些东西,但我有一个我无法弄清楚的问题。

所以我有这个简单的几乎空的XML:

<?xml version="1.0" encoding="UTF-8"?>
<imageData> 
</imageData>

我想要做的是每次单击按钮时,XML文档都会打开并附加一个新子项,所以它看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<imageData>
   <image id="myID"> <--- (Note the attribute in here)
      <person>MyPersonName</person>
      <number>MyNumber</number>
   </image> 
</imageData>

到目前为止,我已经能够使用类似的东西使它工作了一些,但我似乎无法找到一种方法将属性附加到图像标记,我需要能够插入不同的子图像'images'标签基于ID属性,因为我对如何在外部XML文档上使用$xml=new SimpleXMLElement($imageData);函数感到非常困惑:

$xml = simplexml_load_file('myXML.xml');
$xml->addChild('image'); <--Want to add an id="myID" attribute to this child
$xml->image->addChild('person', 'myPersonName'); <--Want to add this child to the image tag with the attribute I added up there)
$xml->image->addChild('number','Mynumber');
file_put_contents('myXML.xml', $xml->asXML());

非常感谢任何帮助或指向正确的方向。

2 个答案:

答案 0 :(得分:1)

您不想使用新的SimpleXMLElement语法。只是做

$xml->image->addAttribute('id', 'myID');

答案 1 :(得分:1)

SimpleXMLElement::addChild()将新创建的元素作为另一个可以处理的SimpleXMLElement实例返回

<?php
$imageData = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><imageData />');

onClick( $imageData ); echo $imageData->asXML(); echo "\r\n----\r\n";
onClick( $imageData ); echo $imageData->asXML(); echo "\r\n----\r\n";
onClick( $imageData ); echo $imageData->asXML(); echo "\r\n----\r\n";
onClick( $imageData ); echo $imageData->asXML(); echo "\r\n----\r\n";


function onClick($imageData) {
    static $id = 0;
    $img = $imageData->addChild('image');
    $img['id'] = ++$id;
    $img->person = 'person #'.$id;
    $img->number = '47'.$id;
}

打印

<?xml version="1.0" encoding="UTF-8"?>
<imageData><image id="1"><person>person #1</person><number>471</number></image></imageData>

----
<?xml version="1.0" encoding="UTF-8"?>
<imageData><image id="1"><person>person #1</person><number>471</number></image><image id="2"><person>person #2</person><number>472</number></image></imageData>

----
<?xml version="1.0" encoding="UTF-8"?>
<imageData><image id="1"><person>person #1</person><number>471</number></image><image id="2"><person>person #2</person><number>472</number></image><image id="3"><person>person #3</person><number>473</number></image></imageData>

----
<?xml version="1.0" encoding="UTF-8"?>
<imageData><image id="1"><person>person #1</person><number>471</number></image><image id="2"><person>person #2</person><number>472</number></image><image id="3"><person>person #3</person><number>473</number></image><image id="4"><person>person #4</person><number>474</number></image></imageData>

----