2014-02-24 105 views
0

我将HTML内容解析为SOAP响应,但无法在客户端中检索到它。使用PHP解析SOAP响应?

这是我用于解析SOAP响应的PHP代码:

$obj = simplexml_load_string(read_file('../soap.xml')); 
var_dump($obj->children('http://schemas.xmlsoap.org/soap/envelope/')); 

这里是SOAP响应:

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
    <GetDetailsResponse xmlns="http://192.168.2.34:180/"> 
     <GetDetailsResult>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt; 
     &lt;html xmlns="http://www.w3.org/1999/xhtml"&gt; 
     </GetDetailsResult> 
    </GetDetailsResponse> 
    </soap:Body> 
</soap:Envelope> 

它显示了以下错误:

A PHP Error was encountered 

Severity: Warning 

Message: simplexml_load_string(): Entity: line 1: parser error : XML declaration allowed only at the start of the document 

Filename: controller.php 

Line Number: 60 

A PHP Error was encountered 

Severity: Warning 

Message: simplexml_load_string(): 

A PHP Error was encountered 

Severity: Warning 

Message: simplexml_load_string():^

Filename: controller.php 

Line Number: 60 

请帮我解析它使用PHP?

回答

0

var_dump($ obj-> children('http://schemas.xmlsoap.org/soap/envelope/'))的输出是什么?

+0

它告诉我,我的问题上面给 –

+0

一个PHP错误遇到 严重的错误:警告 消息:simplexml_load_string():实体:第1行:分析器错误:XML声明只允许在文档的开始 文件名:控制器/ pte.php 行号:60 甲PHP错误遇到 严重性:警告 消息:simplexml_load_string(): 甲PHP错误遇到 严重性:警告 消息:simplexml_load_string():^ 文件名:控制器/ pte.php 行号:60 –

+0

我建议两件事: 1. $ xml ='你的回应在这里'; $ obj = simplexml_load_string(read_file($ xml)); var_dump($ obj-> children('http://schemas.xmlsoap.org/soap/envelope/')); 和2: var_dump(readfile('../ soap.xml')); 可能在xml文件的开头有一些额外的字符。 –

0

我有一个简单的解决方案如何解析SOAP响应

我有XML resopnse文件

<?xml version="1.0" encoding="utf-8"?> 
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     <soap:Body> 
      <xyzResponse xmlns="http://tempuri.org/"> 
       <xyzResult> 
        <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
         <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 
          <xs:complexType> 
           <xs:choice minOccurs="0" maxOccurs="unbounded"> 
            <xs:element name="Table"> 
             <xs:complexType> 
              <xs:sequence> 
               <xs:element name="myCityID" type="xs:int" minOccurs="0" /> 
               <xs:element name="myCityName" type="xs:string" minOccurs="0" /> 

               <xs:element name="myLat" type="xs:double" minOccurs="0" /> 
               <xs:element name="myLon" type="xs:double" minOccurs="0" /> 
              </xs:sequence> 
             </xs:complexType> 
            </xs:element> 
           </xs:choice> 
          </xs:complexType> 
         </xs:element> 
        </xs:schema> 
        <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> 
         <NewDataSet xmlns=""> 
          <Table diffgr:id="Table1" msdata:rowOrder="0"> 
           <CityID>1</CityID> 
           <CityName>Ahmedabad</CityName> 
           <Lat>23.045839</Lat> 
           <Lon>72.550578</Lon> 
          </Table> 
          <Table diffgr:id="Table2" msdata:rowOrder="1"> 
           <CityID>21</CityID> 
           <CityName>Amritsar</CityName> 
           <Lat>31.705603</Lat> 
           <Lon>74.807337</Lon> 
          </Table> 
         </NewDataSet> 
        </diffgr:diffgram> 
       </xyzResult> 
      </xyzResponse> 
     </soap:Body> 
    </soap:Envelope> 

我只想检索表中的数据,然后下面的代码使用

  $sxe = new SimpleXMLElement($response);//in $response varible its a xml file or xml response 
      $sxe->registerXPathNamespace('d', 'urn:schemas-microsoft-com:xml-diffgram-v1'); 
      $result = $sxe->xpath("//NewDataSet"); 
      echo "<pre>"; 
      //print_r($result[0]); 
      foreach ($result[0] as $title) { 
       print_r($title); 
       //echo $title->CityID; 
      } 

欲了解更多信息,请访问

https://vaja906programmingworld.wordpress.com/

文章名称:如何解析SOAPResponse使用PHP