如何在PHP中解析复杂的XML-RPC结构?

时间:2011-07-20 15:04:31

标签: php xml simplexml xml-rpc

这是我的XML对象:http://pastebin.com/0L8vf0ja 这是从:

创建的
<?xml version="1.0" encoding="utf-8"?>
<methodResponse><params><param><value><struct><member><name>result</name><value><struct><member><name>application_instance_id</name><value><i4>89</i4></value></member></struct></value></member><member><name>status</name><value><i4>0</i4></value></member></struct></value></param></params></methodResponse>

我知道这个级别:

 $ApplicationInstanceID = (int)(string)$data->params->param->value->struct->member-> 

但是从这里开始,就像你在pastebin中看到的那样,它变成了一个对象数组 - 我不知道如何继续。

请问任何想法?

4 个答案:

答案 0 :(得分:2)

$ApplicationInstanceID = (int)(string)$data->params->param->value->struct->member[0]-> // first <member>
$ApplicationInstanceID = (int)(string)$data->params->param->value->struct->member[1]-> // second <member>

答案 1 :(得分:2)

以数组形式访问:

$x = '<root><child><foo>23</foo><foo>34</foo></child></root>';
$xml = new SimpleXMLElement($x);
var_dump($xml->child->foo[0]);
var_dump($xml->child->foo[1]);

但是,如果启用它,xmlrpc_decode功能可能更容易使用。

var_dump(xmlrpc_decode($yourxml));
array(2) {
  ["result"]=>
  array(1) {
    ["application_instance_id"]=>
    int(89)
  }
  ["status"]=>
  int(0)
}

答案 2 :(得分:1)

我有点困惑 - 看起来你已经将XML解析成了一个PHP对象......所以现在只需访问数组的子成员就像数组中的任何元素一样:

$data->params->param->value->struct->member[0]

而且,对于它的属性:

$data->params->param->value->struct->member[0]->name

答案 3 :(得分:0)

您可以尝试使用xpath来获取我认为的节点值,SimpleXml实现它...
http://php.net/manual/en/simplexmlelement.xpath.php