2017-04-18 2 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> 

내가 통해 반복하고있어 새 자식 XML 레코드를 생성하는 AddChild를 사용하지만 내 최종 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을 작성해야했습니다.