首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >帮助您使用PHP从响应体中提取XML数据

帮助您使用PHP从响应体中提取XML数据
EN

Stack Overflow用户
提问于 2010-05-24 21:00:58
回答 3查看 326关注 0票数 0

我正在做一个使用PHP和Zend Framework从JMS队列中提取数据的项目。HTTP客户端响应如下所示。我所需要的只是XML字符串。

我提出了/(.*)/gs,它在http://gskinner.com/RegExr/上测试正常,但是preg_match调用返回一个空的matches数组。

我将继续寻找一种模式,但我想我也会在这里发布。

感谢所有读过的人,等等。

史蒂夫

更新:我无法正确粘贴代码。这里有一个指向粘贴站的链接:http://pastebin.com/rQxzcfSg

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-05-24 21:18:49

以下代码片段:

代码语言:javascript
运行
复制
<?php

$text = <<<EOT

blah blah <0>
<RequestDetails><1><2><3>test</RequestDetails>
<RequestDetails><4><5><6>blah
more blah blah
</RequestDetails>
blah blah <7>


EOT;

print $text;

preg_match_all('/<RequestDetails>(.*?)<\/RequestDetails>/s', $text, $matches);

print_r($matches);

?>

生成以下输出:

代码语言:javascript
运行
复制
blah blah <0>
<RequestDetails><1><2><3>test</RequestDetails>
<RequestDetails><4><5><6>blah
more blah blah
</RequestDetails>
blah blah <7>

Array
(
    [0] => Array
        (
            [0] => <RequestDetails><1><2><3>test</RequestDetails>
            [1] => <RequestDetails><4><5><6>blah
more blah blah
</RequestDetails>
        )

    [1] => Array
        (
            [0] => <1><2><3>test
            [1] => <4><5><6>blah
more blah blah

        )

)

我使用了preg_match_all而不是/g标志,还使用了(.*?)不情愿匹配,这正是您希望获得多个匹配的原因。

为了了解为什么会有所不同,在下面的文本中,有两个A.*?Z匹配,但只有一个A.*Z

代码语言:javascript
运行
复制
 ---A--Z---A--Z----
    ^^^^^^^^^^^
       A.*Z

也就是说,使用regex解析XML是不明智的。使用适当的XML解析器;这将使您的工作变得更容易。

票数 1
EN

Stack Overflow用户

发布于 2010-05-24 21:14:51

我想说,既然PHP5附带了像SimpleXML这样的板载工具,为什么还要为复杂的正则表达式而烦恼呢

代码语言:javascript
运行
复制
$xml = simplexml_load_string($string); 

print_r($xml); // should output complete tree for you to walk through easily

当然,您只需删除MIME部分,只向函数提交原始XML即可。

有关SimpleXML的更多信息,请点击此处。

票数 0
EN

Stack Overflow用户

发布于 2010-05-24 21:22:59

您的g无效。请改用m (用于多行)。使用this tester测试/(.*)<\/RequestDetails>/gs/(.*)<\/RequestDetails>/ms

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

https://stackoverflow.com/questions/2897134

复制
相关文章

相似问题

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