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

PHP adding child and attributes on existing XML file

我一直在阅读有关 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>

到目前为止,我已经能够使用类似的方法让它工作一些,但我似乎无法找到一种方法来将属性附加到我需要能够插入的图像标签基于 ID 属性的不同子 'images' 标签,因为我对如何在外部 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());

如有任何帮助或指出正确的方向,我们将不胜感激。

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

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

SimpleXMLElement::addChild() returns 新创建的元素作为您可以处理的另一个 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>

----