PHP解析xml内容

时间:2016-01-28 13:06:43

标签: php xml soap

这是我发送请求的方式

$header = "POST 213.207.000.000/services/AmountCharging/v3 HTTP/1.1 \r\n"; $header .= "Content-type: text/xml;charset=UTF-8 \r\n"; 
$header .= "Content-length: ".strlen($request_xml)." \r\n"; 
$header .= "Content-transfer-encoding: text \r\n"; 
$header .= "Connection: Keep-Alive \r\n\r\n"; 
$header .= $request_xml; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_URL,$url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_TIMEOUT, 120); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $header);
$strxml = curl_exec($ch);  

下面是我的XML响应,使用php我只想抓取<soapenv:Body></soapenv:Body>

的内容
<?xml version="1.0" encoding="utf-8" ?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ns1:chargeAmountResponse xmlns:ns1="http://www.csapi.org/schema/parlayx/payment/amount_charging/v3_1/local"></ns1:chargeAmountResponse>
</soapenv:Body>
</soapenv:Envelope>

有什么想法吗? 谢谢..

1 个答案:

答案 0 :(得分:0)

鉴于在$strxml='<?xml version="1.0" encoding="utf-8" ?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <ns1:chargeAmountResponse xmlns:ns1="http://www.csapi.org/schema/parlayx/payment/amount_charging/v3_1/local"></ns1:chargeAmountResponse> </soapenv:Body> </soapenv:Envelope>'; $dom=new DOMDocument; $dom->loadXML( $strxml ); $body=$dom->getElementsByTagNameNS('http://schemas.xmlsoap.org/soap/envelope/','Body')->item(0); echo 'Body: '.$body->tagName.', Child: '.$body->childNodes->item(1)->tagName.', Attribute: '.$body->childNodes->item(1)->getAttribute('xmlns:ns1'); Output ------ Body: soapenv:Body, Child: ns1:chargeAmountResponse, Attribute: http://www.csapi.org/schema/parlayx/payment/amount_charging/v3_1/local update: ------- Given that it does appear supplying a single line string causes errors you could aproach it slightly differently. $col=$dom->getElementsByTagName('*'); foreach( $col as $node ) { echo 'tag:'.$node->tagName.' value:'.$node->nodeValue.BR; } 内确实没有什么值得一看,以下内容并没有真正表现出任何有趣但应该有所帮助。

{{1}}