2017-04-18 70 views
0

我試圖根據一些數據來生成一個XML文件,這些數據是在循環中處理的。我最後的XML輸出需要看起來像這樣:PHP SimpleXMLElement addChild僅顯示循環中的最後一個值

<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> 

在循環中的最後一條記錄,而不是一個在循環中的所有記錄。

回答

0

因爲你從根元素$xml變量的值更新到新添加的子元素在這裏:

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

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

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

而且,您預期的最終XML格式不正確,因此無法使用正確的XML解析器正常生成。根目錄<xml>仍然需要製作XML。

相關問題