Добавить дочерние элементы с одинаковыми именами, используя простой XML - PullRequest
3 голосов
/ 10 ноября 2011
//create a simple xml object
$xml = new SimpleXMLElement('some valid xml');

//add a my_elements node
$xml->addChild('my_elements');

//an array of elements that will be added to to my_elments
$my_elements = array('element_1', 'element_2', 'element_3');

foreach($my_elements as $element){
   //my_element is only added once as shown below
   $xml->my_elements->addChild('my_element');

   $xml->my_elements->my_element->addChild('something', $element);
}

Как бы я хотел, чтобы это выглядело примерно так (показано в XML для простоты чтения)

<xml>
   <my_elements>
      <my_element>
          <something>element_1</something>
      </my_element>
      <my_element>
          <something>element_2</something>
      </my_element>
      <my_element>
          <something>element_3</something>
      </my_element>
   </my_elements>
</xml>

Но то, что я получаю, это нечто более похожее

<xml>
   <my_elements>
      <my_element>
         <something>element_1</something>
         <something>element_2</something>
         <something>element_3</something>
      </my_element>
   </my_elements>
</xml>

Можно ли создать отдельный дочерний узел при использовании addChild с тем же именем?

1 Ответ

5 голосов
/ 10 ноября 2011

Да, вам нужно только добавить дочерние элементы к новому добавленному элементу, а не к существующему.См. http://php.net/manual/en/simplexmlelement.addchild.php:

foreach($my_elements as $element){
   //my_element is only added once as shown below
   $new_my_element = $xml->my_elements->addChild('my_element');
   $new_my_element->addChild('something', $element);
}
...