SimpleXML重新格式化

时间:2017-04-05 13:56:21

标签: php xml magento

我正在尝试编写一个API,用于从magento向我的POS系统写入数据。我的POS供应商给了我一个代码,我需要用XML 1.0格式编写数据。 我使用SimpleXML表单编写数据,因为我需要做一些循环来获取我需要的所有数据。

问题是API没有读取我正确编写的数据。我已经尝试使用DOM重新格式化代码而没有成功。如何编辑这个SimpleXML,以便我发布的数据与XML 1.0一样。

显然导致问题的原因是rawurlencode函数无法读取SimpleXML,但我的API只能理解这种方式......

我是PHP和XML的新手,所以欢迎任何建议。提前致谢。

$xml = '<?xml version="1.0" encoding="UTF-8"?><pedido></pedido>';
$xmlpost = new SimpleXMLElement($xml); 
$pedidob = $xmlpost->addChild('pedido');
$clienteb = $pedidob->addChild('cliente');
$clientebno = $clienteb->addChild('nome',$nome);
$clientebcp = $clienteb->addChild('cpf_cnpj',$cpf);
$clienteben = $clienteb->addChild('endereco',$rua);
$clientebnu = $clienteb->addChild('numero',$numero);
$clientebco = $clienteb->addChild('complemento',$complemento);
$clientebba = $clienteb->addChild('bairro',$bairro);
$clientebce = $clienteb->addChild('cep',$cep);
$clientebci = $clienteb->addChild('cidade',$cidade);
$clientebuf = $clienteb->addChild('uf',$estado);
$clientebfo = $clienteb->addChild('fone',$telefone);
$clientebce = $clienteb->addChild('celular',$celular);
$clientebem = $clienteb->addChild('email',$email);
$itensb = $pedidob->addChild('itens');
	for ($k = 0; $k < $arrayl; $k++) {
    		$itemb = $itensb->addChild('item');
    		$codigob = $itemb->addChild('codigo', $infopp[$k][0]);
    		$descricaob = $itemb->addChild('descricao', $infopp[$k][1]);
			$qtdeb = $itemb->addChild('qtde', $infopp[$k][2]);
			$vlrunitb = $itemb->addChild('vlr_unit', $infopp[$k][3]);
		}
$parcelasb= $pedidob->addChild('parcelas');
$parcelab = $parcelasb->addChild('parcela');
$vlrb = $parcelab->addChild('vlr',$Subtotal);
$freteb = $pedidob->addChild('vlr_frete',$Shipping);

$dom = new DOMDocument('1.0');
$dom->preserveWhiteSpace = true;
$dom->formatOutput = true;
$dom->loadXML($xmlpost->asXML());
echo $dom->saveXML();

$posts = array (
    "apikey" => "*******",
    "xml" => rawurlencode($xmlpost)
);

1 个答案:

答案 0 :(得分:0)

好吧,实际上这很简单......我只需要创建另一个变量并将我的SimpleXML asXML()存储在其中

$ XMLvariable = $ simpleXMLvariable-&gt; asXML();