按标记名称获取XML元素

时间:2013-09-09 15:11:25

标签: php xml

var_dump($object)输出以下结果:

object(stdClass)#9 (5) {
    ["data"]=>  object(stdClass)#8 {
        ["validFiling"]=>  object(stdClass)#7 {
                ["indicators"]=>  string(6) "MODE_S"
        }
        ["plan"]=>  object(stdClass)#6 {
            ["id"]=>  string(10) "xxx"
        }
    }
}

在此数据结构中,我需要访问字段id的内容。我通过以下方式执行此操作:

try
{
  $object =   $client->getPlan($p);
  var_dump($object);
}
  catch (Exception $e) {
  print $e->getMessage();
}

$line = $client->getLastResponse();

$doc = new DOMDocument();
$doc->loadXML($line);
$data = $doc->getElementsByTagName('data');
$fp = $data->getElementsByTagName('plan');
$id = $fp->getElementsByTagName('id');
$fId = $id->item(0)->nodeValue;

错误是(在$fp = $data->getElementsByTagName('plan')行):

Call to undefined method DOMNodeList::getElementsByTagName()

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

发生错误是因为$dataDOMNodeList,但没有getElementsByTagName()方法。 $fp变量存在同样的问题。如果要访问找到的第一个data元素,请更改为:

$data = $doc->getElementsByTagName('data')->item(0);
$fp = $data->getElementsByTagName('plan')->item(0);
$id = $fp->getElementsByTagName('id');

或者,如果您想迭代data元素并将处理应用于每个元素:

$dataList = $doc->getElementsByTagName('data');

foreach($dataList as $data)
{
    $fp = $data->getElementsByTagName('plan')->item(0);
    $id = $fp->getElementsByTagName('id');
    $fId = $id->item(0)->nodeValue;
}

上述方法有效,因为它在节点上调用getElementsByTagName()而不是列表。