$key=>$value のペアの配列を受け入れるための簡単なメソッドを作成しました。その配列をループして、simpleXML オブジェクトを構築したいと考えています。この方法はほとんど機能します。ただし、反復ごとに子ノードを上書きします。
コード:
public function format_comment($fieldValues)
{
$xml = new SimpleXMLElement("<ROOT></ROOT>");
foreach($fieldValues as $field=>$value)
{
if($field=='header')
{
$xmlChange = $xml->addChild('CHANGE');
$xmlChange->addAttribute('field', $value);
}
elseif($field=='subheader')
{
$newXML = $xmlChange->addChild('NEW');
$newXML->addAttribute('field', $value);
}
elseif($field=='newvalue')
{
$xmlNewValue = $newXML->addChild('VALUE', $value);
}
elseif($field=='oldvalue')
{
$xmlFrom = $xmlChange->addChild('FROM');
$xmlFrom->addAttribute('field', $field);
$xmlFromValue = $xmlFrom->addChild('VALUE', $value);
}
}
return($xml->asXML());
}
入力として、次の配列を使用しています。
$note_fields = array('header'=>'Communication', 'subheader'=>'contacted', 'newvalue'=>'Dale J Neimeier','header'=>'Communication', 'subheader'=>'note', 'newvalue'=>'blah blah blah', 'header'=>'Communication', 'subheader'=>'note', 'newvalue'=>'new text', 'oldvalue'=>'previous text');
私の出力は次のとおりです。
<ROOT>
<CHANGE field="Communication">
<NEW field="note">
<VALUE>new text</VALUE>
</NEW>
<FROM field="oldvalue">
<VALUE>previous text</VALUE>
</FROM>
</CHANGE>
</ROOT>
配列のすべての繰り返し、「CHANGE」タグ、およびそのすべての子が上書きされることがわかります。理由と修正方法がわかりません。
どんな助けでも大歓迎です。