求助,php解析带命名空间的xml?

nicetake 2015-11-09 02:46:09
xml文件有axis生成的:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<checkQyResponse xmlns="">
<ns1:checkQyReturn xmlns:ns1="http://jandar.com.cn">{"code":"2","message":"企业名称和企业注册号匹配"}</ns1:checkQyReturn>
</checkQyResponse>
</soapenv:Body>
</soapenv:Envelope>


我想获得ns1:checkQyReturn当中的内容。
请问如何用php获取?
...全文
292 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2015-11-12
  • 打赏
  • 举报
回复
暴力一下就简单多了
$s =<<< XML
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<checkQyResponse xmlns="">
<ns1:checkQyReturn xmlns:ns1="http://jandar.com.cn">{{"code":"2","message":"企业名称和企业注册号匹配"}</ns1:checkQyReturn>
</checkQyResponse>
</soapenv:Body>
</soapenv:Envelope>
XML;

$s = preg_replace('/\w+:/', '', $s);
$x = simplexml_load_string($s);
print_r($x);
SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [soapenv] => //schemas.xmlsoap.org/soap/envelope/
            [xsd] => //www.w3.org/2001/XMLSchema
            [xsi] => //www.w3.org/2001/XMLSchema-instance
        )

    [Body] => SimpleXMLElement Object
        (
            [checkQyResponse] => SimpleXMLElement Object
                (
                    [checkQyReturn] => {"code":"2","message":"企业名称和企业注册号匹配"}
                )

        )

)

nicetake 2015-11-12
  • 打赏
  • 举报
回复
[quote=引用 1 楼 fdipzone 的回复:] 可以使用new SimpleXmlElement解决 试了命名空间,但解析不了最后用的转换json才解析的。 $xmlstr = preg_replace('/\sxmlns="(.*?)"/', ' _xmlns="${1}"', $simple); $xmlstr = preg_replace('/<(\/)?(\w+):(\w+)/', '<${1}${2}_${3}', $xmlstr); $xmlstr = preg_replace('/(\w+):(\w+)="(.*?)"/', '${1}_${2}="${3}"', $xmlstr); $xmlobj = simplexml_load_string($xmlstr); $json = json_decode(json_encode($xmlobj), true); //print_r(json_decode(json_encode($xmlobj), true)); //print_r($json); $str = $json['soapenv_Body']['checkQyResponse']['ns1_checkQyReturn'];
傲雪星枫 2015-11-11
  • 打赏
  • 举报
回复
可以使用new SimpleXmlElement解决


$x = new SimpleXmlElement($str);
foreach($x->entry as $t){
echo $t->id . "<br >";
echo $t->updated . "<br />";
$namespaces = $t->getNameSpaces(true);
$gd = $t->children($namespaces['ns1']);
echo $gd->phoneNumber;
}


参考:http://www.neatstudio.com/show-1549-1.shtml
内容概要:本文档聚焦于基于Peng-Robinson状态方程的化工热力学计算研究,系统介绍了利用Matlab代码实现纯组分及多组分系统的压缩因子(z因子)和逸度系数的计算方法,并进一步拓展至泡点压力与露点压力的数值求解。资源涵盖了从状态方程推导、非线性方程求根、相平衡条件判断到迭代算法实现的完整技术路线,提供了可运行的Matlab程序代码,有助于深入理解实际工程中物性参数的计算原理与实现过程; 适合人群:具备化工热力学基础知识和一定Matlab编程能力的高校学生、科研人员及工程技术人员,尤其适合从事过程系统模拟、油气田开发、精馏设计及相关领域研究的专业人士; 使用场景及目标:① 掌握Peng-Robinson方程在真实气体物性计算中的应用;② 实现多组分混合体系的相平衡计算与泡/露点预测;③ 为Aspen Plus等商用流程模拟软件提供底层算法验证与教学参考;④ 支持科研论文复现、课程设计、毕业设计及工业过程优化中的热力学数据支撑需求; 阅读建议:建议读者结合经典化工热力学教材同步学习,重点理解立方型状态方程的根判别、迭代收敛策略与相平衡准则的数学表达,动手调试并运行所提供的Matlab代码以掌握算法细节,还可将其扩展应用于其他状态方程(如SRK、vdW)的对比分析研究。

21,889

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧