0

$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」タグ、およびそのすべての子が上書きされることがわかります。理由と修正方法がわかりません。

どんな助けでも大歓迎です。

4

1 に答える 1

0

問題は、実際には $note_fields 配列を構築する方法にありました。繰り返しキーがあるため、それらは互いに上書きされました。

于 2012-11-18T14:26:25.207 に答える