在PHP中使用SimpleXMLElement

时间:2015-12-03 13:01:35

标签: php simplexml

我正在尝试从XML文件中检索一些值:

<lx:message xsi:schemaLocation="http://api.latx.corp.netapp.com/ws/schema/1.0/wsmessage.xsd">
    <lx:header>
      <lx:status>success</lx:status>
    </lx:header>
  <lx:results>
    <lx:perf_data>
       <lx:perfid>331070</lx:perfid>
       <lx:filepath>/x/eng/cs-data1/latx/prd/20151009_uploads/akshayp/AIo.data</lx:filepath>
       <lx:filename>AIo.data</lx:filename>
       <lx:datatype>perf8</lx:datatype>
       <lx:userid>akshayp</lx:userid>
 .
 .
 .

我想检索<lx:userid>

中的值

我的代码是:

<?php

                            $response = file_get_contents('http://www.myapi.com/myxml.xml');
                            $response = new SimpleXMLElement($response);

                            echo $response->{'lx:message'}->{'lx:results'}->{'lx:perf_data'}->{'lx:userid'};


                    ?>

但我得到的错误如下:

  

尝试在第116行的C:\ wamp \ www \ 1 \ simple.php中获取非对象的属性

有人可以帮忙,我已经尝试了很多方法来解决问题,但仍然失败了。

感谢。

1 个答案:

答案 0 :(得分:1)

使用SimpleXMLElement::getNamespaces获取命名空间uri,然后使用SimpleXMLElement::children获取&#34;进入&#34;这个命名空间。

<?php
$response = new SimpleXMLElement( data() );
$namespaces = $response->getNamespaces(true);
$nsLX = $namespaces['lx'];
echo $response->children($nsLX)->results->perf_data->userid;

function data() {
    return <<< eox
<lx:message xmlns:lx="foo">
    <lx:header>
        <lx:status>success</lx:status>
    </lx:header>
  <lx:results>
        <lx:perf_data>
            <lx:perfid>331070</lx:perfid>
            <lx:filepath>/x/eng/cs-data1/latx/prd/20151009_uploads/akshayp/AIo.data</lx:filepath>
            <lx:filename>AIo.data</lx:filename>
            <lx:datatype>perf8</lx:datatype>
            <lx:userid>akshayp</lx:userid>
        </lx:perf_data>
    </lx:results>
</lx:message>
eox;
}