Home > Article > Backend Development > ,php解析带命名空间的xml?
xml文件有axis生成的:
我想获得ns1:checkQyReturn当中的内容。
请问如何用php获取?
可以使用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; }
可以使用new SimpleXmlElement解决
试了命名空间,但解析不了最后用的转换json才解析的。
$xmlstr = preg_replace('/\sxmlns="(.*?)"/', ' _xmlns="${1}"', $simple);
$xmlstr = preg_replace('/ $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'];
暴力一下就简单多了
$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":"企业名称和企业注册号匹配"} ) ))