【问题标题】:PHP SimpleXMLElement addChild in a Loop Only Showing Last Value循环中的 PHP SimpleXMLElement addChild 仅显示最后一个值
【发布时间】:2017-04-18 06:36:22
【问题描述】:

我正在尝试根据我在循环中处理的一些数据生成一个 XML 文件。我的最终 XML 输出需要如下所示:

<Line>
  <Code>123</Code>
  <Description>Acme Constructions</Description>
  <TransactionAmount>44.00</TransactionAmount>
  <BaseCurrency>AUD</BaseCurrency>
</Line>
<Line>
  <Code>456</Code>
  <Description>Acme Flowers</Description>
  <TransactionAmount>23.00</TransactionAmount>
  <BaseCurrency>AUD</BaseCurrency>
</Line>
<Line>
  <Code>789</Code>
  <Description>General Hospital</Description>
  <TransactionAmount>19.00</TransactionAmount>
  <BaseCurrency>AUD</BaseCurrency>
</Line>

我正在循环并使用 addChild 创建一个新的子 XML 记录,但我的最终 XML 文件只显示循环中的最后一个值,而不是之前的值。这是我的 PHP 代码:

$xml = new SimpleXMLElement('<xml></xml>');

foreach ($invoiceLineItems->LineItem as $invoiceLineItem) {

    $description = $invoiceLineItem->Description;
    $amount = $invoiceLineItem->UnitAmount;
    $Code = $invoiceLineItem->AccountCode;

    $xml = $xml->addChild('Line');
    $xml->addChild('Code', $Code);
    $xml->addChild('Description', $description);
    $xml->addChild('Amount', $amount);

} 


// Save XML
$xml->asXML();

$dom = new DOMDocument('1.0');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($xml->asXML());
$dom->save($fileName);

这会生成 .xml 文件,但它只有一个

<Line>
...
</Line> 

对于循环中的最后一条记录,而不是循环中的所有记录。

【问题讨论】:

    标签: php xml foreach simplexml


    【解决方案1】:

    因为您在这里将$xml 变量的值从根元素更新为新添加的子元素:

    $xml = $xml->addChild('Line');
    

    使用不同的变量来引用新添加的子元素:

    $line = $xml->addChild('Line');
    $line->addChild('Code', $Code);
    $line->addChild('Description', $description);
    $line->addChild('Amount', $amount);
    

    此外,您预期的最终 XML 格式不正确,因此无法使用适当的 XML 解析器正常生成。根&lt;xml&gt; 仍然需要创建一个XML。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-03
      • 2017-02-12
      • 2011-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多