看了一下xml结构,感觉该代码不是完整版,看到你用 simplexml_load_string 和 loadXML来解析,这2个肯定解析,但是不推荐,如果xml结构多且复杂解析效率会很低,推荐用xml_parser_create实现,这个效率要快很多。
成都创新互联公司始终坚持【策划先行,效果至上】的经营理念,通过多达10多年累计超上千家客户的网站建设总结了一套系统有效的推广解决方案,现已广泛运用于各行各业的客户,其中包括:成都石凉亭等企业,备受客户赞扬。
根据你贴的 xml,发现是xml里嵌套xml,我的思路是先解析出第一层的xml数据集,第一次层的xml数据集其实也就是你待解析的xml,采用循环逐个再次解析即可得到你想要的数据了,贴上我在其他项目中用xml_parser_create的代码供你参考。
private function parseXml($xml, $fileName)
{
$p = xml_parser_create();
xml_parse_into_struct($p, $xml, $vals, $index);
xml_parser_free($p);
$cnt = count($index['URL']);
$xmlData = [];
for ($i = 0; $i $cnt; $i++) {
$data = [];
$data['url'] = $vals[$index['URL'][$i]]['value'];
$data['title'] = $vals[$index['TITLE'][$i]]['value'];
$data['file'] = $fileName;
$xmlData[] = $data;
}
return $xmlData;
}
你在浏览器地址栏里输入一个url,然后回车,如果这个url是指向你的apache服务器,那么你的apache服务器就会解析url请求的子路径以及参数,比如url:,apache发现请求的子路径是一个.php文件,那么它就会调用php解析器去执行这个php文件(为什么会自动调用php解析器呢?其实这是一个默认配置,否则apache只是会简单返回请求文件的内容)。
解析器解析php文件其实就是执行php文件,你的php文件可能有逻辑(比方说查询数据库),也可能有输出。但最后apache服务器用到的只是你的php执行产生的输出。也就是说这个解析过程结束后php脚本会产生输出,apache就把这些输出当成那个请求的url的response返回给浏览器,浏览器按照html的语法解析那些response,并显示在浏览器上
json_encode
对中文的处理是有问题的:
不能处理GBK编码,所有的GBK编码都会替换成空字符;
utf8编码的中文被编码成unicode编码,相当于javascript的escape函数
处理的结果。
为了能正确使用json,首先我们就应该在编码上采用utf8编码,然后再对
json_encode的返回结果稍加处理就可以得到正确的结果了。
即需要加:原始数据$json=iconv("GBK","UTF-8",$json);
json_decode之后需要显示或使用时,再转回来
echo iconv("UTF-8","GBK",$decode['data'][0]['APPName']);
//使用json_decode函数解码 $arr = json_decode($json,true); $number = $arr['number'];
你如果想让后台以json格式返回数据,那么php就一定要用标准的json格式来输出数据,不要混杂其他无关数据。比如你的“返回的数据:”这几个字就属于多余数据,ajax在接收到返回数据后就会转换失败。所以你的 echo "返回的数据:"; 应该删掉(如果还有其他类似的输出语句也要删掉),确保输出的数据只有 ["jeff-A-01.png","jeff-d-01.png"] 这样的内容。
PHP实现微信支付,微信支付宝返回的xml结果如下:
xml
appid![CDATA[wx2421b1c4370ec43b]]/appid
attach![CDATA[支付测试]]/attach
bank_type![CDATA[CFT]]/bank_type
fee_type![CDATA[CNY]]/fee_type
is_subscribe![CDATA[Y]]/is_subscribe
mch_id![CDATA[10000100]]/mch_id
nonce_str![CDATA[5d2b6c2a8db53831f7eda20af46e531c]]/nonce_str
openid![CDATA[oUpF8uMEb4qRXf22hE3X68TekukE]]/openid
out_trade_no![CDATA[1409811653]]/out_trade_no
result_code![CDATA[SUCCESS]]/result_code
return_code![CDATA[SUCCESS]]/return_code
sign![CDATA[B552ED6B279343CB493C5DD0D78AB241]]/sign
sub_mch_id![CDATA[10000100]]/sub_mch_id
time_end![CDATA[20140903131540]]/time_end
total_fee1/total_fee
trade_type![CDATA[JSAPI]]/trade_type
transaction_id![CDATA[1004400740201409030005092168]]/transaction_id
/xml