首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有什么简单的方法可以用PHP解析这个文本& xml服务器响应吗?

有什么简单的方法可以用PHP解析这个文本& xml服务器响应吗?
EN

Stack Overflow用户
提问于 2011-12-07 07:54:55
回答 3查看 138关注 0票数 0

我正在使用PHP,而且由于这个服务器响应不是纯XML,我一直在努力将响应转换为变量/数组以供使用。

我只关心XML树中包含的变量。可以有多个容器(类似),而且数量也会不同。也许还有更多的“嵌套”与各种(我相信)。

服务器响应示例:

代码语言:javascript
复制
HTTP/1.1 200 OK
Date: Wed, 07 Dec 2011 01:02:01 GMT
Server: Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e DAV/2 PHP/5.2.17
X-Powered-By: PHP/5.2.17
Cache-Control: no-store, no-cache, no-transform, must-revalidate, private
Expires: 0
Vary: Accept-Encoding,User-Agent
Content-Length: 90
Connection: close
Content-Type: text/xml

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <var1>AAA</var1>
    <var2>BBB</var2>
    <var3>CCC</var3>
</response>

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-07 08:21:24

代码语言:javascript
复制
function xml2array($xml) {
    $xmlary = array();

    $reels = '/<(\w+)\s*([^\/>]*)\s*(?:\/>|>(.*)<\/\s*\\1\s*>)/s';
    $reattrs = '/(\w+)=(?:"|\')([^"\']*)(:?"|\')/';

    preg_match_all($reels, $xml, $elements);

    foreach ($elements[1] as $ie => $xx) {
        $xmlary[$ie]["name"] = $elements[1][$ie];

        if ($attributes = trim($elements[2][$ie])) {
            preg_match_all($reattrs, $attributes, $att);
            foreach ($att[1] as $ia => $xx)
                $xmlary[$ie]["attributes"][$att[1][$ia]] = $att[2][$ia];
        }

        $cdend = strpos($elements[3][$ie], "<");
        if ($cdend > 0) {
            $xmlary[$ie]["text"] = substr($elements[3][$ie], 0, $cdend - 1);
        }

        if (preg_match($reels, $elements[3][$ie]))
            $xmlary[$ie]["elements"] = xml2array($elements[3][$ie]);
        else if ($elements[3][$ie]) {
            $xmlary[$ie]["text"] = $elements[3][$ie];
        }
    }

    return $xmlary;
}
票数 1
EN

Stack Overflow用户

发布于 2011-12-07 08:04:58

您可以使用strstr();进行类似的操作。

代码语言:javascript
复制
$h = 'HTTP/1.1 200 OK
Date: Wed, 07 Dec 2011 01:02:01 GMT
Server: Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/0.9.8e DAV/2 PHP/5.2.17
X-Powered-By: PHP/5.2.17
Cache-Control: no-store, no-cache, no-transform, must-revalidate, private
Expires: 0
Vary: Accept-Encoding,User-Agent
Content-Length: 90
Connection: close
Content-Type: text/xml

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <var1>AAA</var1>
    <var2>BBB</var2>
    <var3>CCC</var3>
</response>';

 print_r(strstr($h, "<?xml")); 

// or this even strstr($h, '<?xml version="1.0" encoding="UTF-8"?>'

这将给出返回的原始xml。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<response>
    <var1>AAA</var1>
    <var2>BBB</var2>
    <var3>CCC</var3>
</response>
票数 0
EN

Stack Overflow用户

发布于 2011-12-07 09:47:14

如果使用PHP5,请使用SimpleXML库从XML创建对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8412025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档