【问题标题】:Add whole xml child new element Php添加整个 xml 子新元素 Php
【发布时间】:2020-11-03 19:29:34
【问题描述】:

我有这个带有许多子节点的 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;
}

【问题讨论】:

  • 您好,您的问题不清楚,您可以编辑它并再次解释您要做什么
  • 现在很清楚我需要什么。使用 php 函数代码,但它只添加第一个 child

标签: php xml appendchild getelementsbytagname createelement


【解决方案1】:

对不起,我误解了你的问题。我没有意识到第二个 XML 文件是您想要通过 PHP 方法获得的。现在我看到了,我想我明白你的问题出在哪里了。您只调用一次 append 函数。您需要遍历每个节点,每次都调用 append,然后再将结果输出到目标 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;
}

【讨论】:

  • 对不起我错了它在节点子里面。 :( 我改变了真实的代码
  • 给出此错误“堆栈跟踪:#0”。它的代码得到错误 $shipping->appendChild($ship);
  • 好的。我只是想解释它需要一个循环来添加到每个节点。我在我认为可以工作的地方对其进行了修改,但您可能需要稍微尝试一下。再试一次。
  • 如果这对您有所帮助,请为答案投票。如果这解决了您的问题,请继续并将其标记为答案。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-28
  • 2018-05-20
  • 1970-01-01
  • 2012-06-14
  • 2018-12-07
  • 2021-02-15
  • 2013-07-19
相关资源
最近更新 更多