PHP到XML插入数组

时间:2013-02-18 15:31:45

标签: php xml

我有一个使用以下示例构建的XML字符串:

//add root
$Add = $dom->appendChild($dom->createElement('Add')); 
//pCase
$pCase = $Add->appendChild($dom->createElement('pCase')); 

//add elements
$LeadGenID = $pCase->appendChild($dom->createElement('LeadGenID'));
$LeadGenID->appendChild($dom->createTextNode('22'));

$Debtor = $pCase->appendChild($dom->createElement('Debtor'));
//address fields
$Addresses = $Debtor->appendChild($dom->createElement('Addresses'));
$Address = $Addresses->appendChild($dom->createElement('Address'));
//array of address objects should go here

$test1 = $dom->saveXML();
$sxe = simplexml_load_string($test1);

if ($sxe === false) {
echo 'Error while parsing the document';
    exit;
}

    $dom_sxe = dom_import_simplexml($sxe);
    if (!$dom_sxe) {
       echo 'Error while converting XML';
       exit;
    }

    $dom = new DOMDocument('1.0', 'utf-8');
    $dom_sxe = $dom->importNode($dom_sxe, true);
    $dom_sxe = $dom->appendChild($dom_sxe);

    echo $dom->save('application.xml');

然后在我的XML中输出以下内容:

<Add>
<pCase>
    <LeadGenID>22</LeadGenID>
    <Debtor>
        <Addresses><Address/></Addresses>
    </Debtor>
</pCase>

我还需要在此XML中输出一个数组,以便完整输出如下:

<Add>
<pCase>
    <LeadGenID>22</LeadGenID>
    <Debtor>
        <Addresses>
            <Address>
                <Street>Some street</Street>
                <Postcode>Some postcode</Postcode>
            </Address>
        </Addresses>
    </Debtor>
</pCase>

我尝试使用

完成此操作
$address_array = array (
    $_POST['Street'] => 'Street',
    $_POST['Postcode'] => 'Postcode'
);
$xml = new SimpleXMLElement('<Address/>');
array_walk_recursive($address_array, array ($xml, 'addChild'));

但此时我完全迷失了。我给出的API在文档上是稀疏的,至少可以说,但我越来越接近它,但我需要输入地址作为网关的数组。我是PHP新手,因为我主要是一名前端开发人员,他通常只在PHP中使用简单的联系表单等。

如何输出我上面给出的XML示例?

由于

2 个答案:

答案 0 :(得分:0)

我发现随机怪异的东西:

  • 您从new SimpleXMLElement('<Address/>')开始,但您的根节点为<Addresses>
  • $Address变量突然出现
  • 一个$dom对象突然冒出来
  • 您致电createTextNode()
    1. 它不是SimpleXML方法,而是DOMDocument方法
    2. 将字符串视为参数,但是它使用SimpleXMLElement实例
    3. 创建文本节点

答案 1 :(得分:0)

看看http://www.lalit.org/lab/convert-php-array-to-xml-with-attributes/ 如果您只需要xml数组,那么这是一个非常小且使用简单的库。