如何使用PHP SimpleXMLElement创建此XML?

时间:2014-04-28 07:45:52

标签: php xml

<?xml version="1.0" encoding="UTF-8"?>
<x:NetworkRequest xmlns:x="http://www.google.com" xmlns:xsi="http://www.w3.org">
    <Version>2.0.0</Version>
    <IpAddress>127.0.0.1</IpAddress>
</x:NetworkRequest>

我试过

$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8" ?><xmlns:x:NetworkRequest></xmlns:x:NetworkRequest>');
$xml->addAttribute('xmlns:x','http://www.google.com');
$xml->addAttribute('xmlns:xsi','http://www.w3.org');
$xml->addChild('Version','2.0.0');
$xml->addChild('IpAddress','127.0.0.1');
echo $xml->asXML();

得到了:

<?xml version="1.0" encoding="UTF-8"?>
<x:NetworkRequest x="http://www.google.com" xsi="http://www.w3.org">
    <Version>2.0.0</Version>
    <IpAddress>127.0.0.1</IpAddress>
</x:NetworkRequest>
xmlns:x="http://www.google.com"

缺少

xsi="http://www.w3.org前缀

1 个答案:

答案 0 :(得分:0)

我尝试在本地运行您的代码,但它不会执行。

我收到以下错误警告:

  

警告:SimpleXMLElement :: __ construct()[simplexmlelement .-- construct]:   命名空间错误:无法解析QName&#39; xmlns:x:&#39;在   第3行的C:\ wamp \ www \ test.php

所以,我有这个懒惰的建议(看作你生成的xml不是那么复杂或需要动态修改;我完全避免使用SimpleXMLElement类):

<?php

function getNetworkRequestXML($version, $ip_address) {
    return '<?xml version="1.0" encoding="UTF-8"?>
<x:NetworkRequest xmlns:x="http://www.google.com" xmlns:xsi="http://www.w3.org">
    <Version>'. $version .'</Version>
    <IpAddress>'. $ip_address .'</IpAddress>
</x:NetworkRequest>';
}

var_dump( getNetworkRequestXML('2.0.0', '127.0.0.1') );

?>

输出:

<?xml version="1.0" encoding="UTF-8"?>
<x:NetworkRequest xmlns:x="http://www.google.com" xmlns:xsi="http://www.w3.org">
    <Version>2.0.0</Version>
    <IpAddress>127.0.0.1</IpAddress>
</x:NetworkRequest>