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