PHP解析XML内容

PHP解析XML内容

问题描述:

这是我的请求发送PHP解析XML内容

$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> 

任何想法,只是内容? 谢谢..

+0

没有真正的内容 - 一个命名空间的空标签是所有 – RamRaider

+0

看到的http://*.com/questions/16412047/parse-xml-namespaces-with-php-simplexml – michi

+0

可能的复制[你如何解析和处理PHP中的HTML/XML?](http://*.com/questions/3577641/how-do-you-parse-and-process-html-xml-in-php) –

鉴于在soapenv:Body内确实没有什么值得一看的,下面并没有真正显示任何有趣的内容,但应该有所帮助。

$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; 
} 
+0

对于行回声我得到以下错误信息: - >注意:试图获取非对象的属性 致命错误:调用成员函数getAttribute() – andreas777

+0

RamRaider,当我把$ strxml作为上面的例子你说它的工作原理,但当我从$ strxml = curl_exec($ ch)将它合并到我的代码中时;它不,这是什么? – andreas777

+0

,这取决于你的代码 - 没有看到代码很难说。 – RamRaider