Добавить весь xml дочерний новый элемент Php - PullRequest
0 голосов
/ 14 июля 2020

У меня есть файл XML со многими дочерними узлами, и у меня есть код PHP, но это только добавление первого узла. Я хочу добавить весь XML в имя дочернего узла.

Текущий XML:

<root>
<result>
<node>
<someting>asdasd</something>
</node>
<node>
<someting>asdasd</something>
</node>
  </result>
        <error/>
      </root>

Что мне нужно:

<root>
<result>
<node>
<someting>asdasd</something>
<Shipping_Cost>9</Shipping_Cost>
</node>
<node>
<someting>asdasd</something>
<Shipping_Cost>9</Shipping_Cost>
</node>
  </result>
        <error/>
      </root>

Текущий PHP код:

function fn_add_shipping($xmlFileToLoad, $destination)
{
    $xmlFileToLoad = 'shipping.xml';
    $dom = new DOMDocument();
    $dom->load($xmlFileToLoad);
    $shipping = $dom->getElementsByTagName('node')->item(0);
    $ship = $dom->createElement('Shipping_Cost', '9');
    $shipping->appendChild($ship);
    $dom->save($destination);
    return $destination;
}

1 Ответ

0 голосов
/ 14 июля 2020

Извините, я неправильно понял ваш вопрос. Я не понимал, что второй XML файл был тем, что вы хотели получить в результате использования метода PHP. Теперь, когда я это вижу, мне кажется, я понимаю, в чем ваша проблема. Вы вызываете функцию добавления только один раз. Вам нужно l oop через каждый узел, вызывая добавление каждый раз перед выводом результатов в файл назначения XML.

Возможно что-то вроде этого:

function fn_add_shipping($xmlFileToLoad, $destination)
{
    $xmlFileToLoad = 'shipping.xml';
    $dom = new DOMDocument();
    $dom->load($xmlFileToLoad);
    $shipping = $dom->getElementsByTagName('node');
    for ($x=0; $x<$shipping->length; $x++)
    {
       $ship = $dom->createElement('Shipping_Cost', '9');
       $shipping[$x]->appendChild($ship);
    }
    $dom->save($destination);
    return $destination;
}
...