2017-09-25 129 views
0

有人能幫我解析下面的soap表格中的soap響應嗎?解析PHP中的SOAP響應?

<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns="http://optusgis/SFSQR.xsd" 
    xmlns:mstns="http://optusgis/SFSQR.xsd" 
    xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="SFSQResponse" 
targetNamespace="http://optusgis/SFSQR.xsd" attributeFormDefault="qualified" elementFormDefault="qualified" 
> 
    <xs:element name="SFSQResponse" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 
     <xs:complexType 
> 
      <xs:choice minOccurs="0" maxOccurs="unbounded"> 
       <xs:element name="SFSQSearch"> 
        <xs:complexType> 
         <xs:sequence 
> 
          <xs:element name="Name" type="xs:string" minOccurs="0"/> 
          <xs:element name="Description" type="xs:string" 
minOccurs="0"/> 
          <xs:element name="Version" type="xs:string" minOccurs="0"/> 
         </xs:sequence> 
        </xs:complexType 
> 
       </xs:element> 
       <xs:element name="AddressEntered"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="StreetAddress" 
type="xs:string" default="" minOccurs="0"/> 
          <xs:element name="StreetNumber" type="xs:string"/> 
          <xs:element 
name="StreetName" type="xs:string"/> 
          <xs:element name="StreetType" type="xs:string"/> 
          <xs:element name 
="StreetSuffix" type="xs:string" minOccurs="0"/> 
          <xs:element name="Suburb" type="xs:string"/> 
          <xs:element 
name="Postcode" type="xs:string"/> 
          <xs:element name="State" type="xs:string"/> 
         </xs:sequence> 
        </xs:complexType 
> 
       </xs:element> 
       <xs:element name="SQResults"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="Location" minOccurs 
="0" maxOccurs="unbounded"> 
           <xs:complexType> 
            <xs:sequence> 
             <xs:element name="Address" minOccurs="0" maxOccurs 
="unbounded"> 
              <xs:complexType> 
               <xs:sequence> 
                <xs:element name="StreetNumber" type="xs:string" default="" 
minOccurs="0"/> 
                <xs:element name="StreetName" type="xs:string" default="" minOccurs="0"/> 
                <xs:element 
name="StreetType" type="xs:string" default="" minOccurs="0"/> 
                <xs:element name="StreetSuffix" type="xs 
:double" minOccurs="0"/> 
                <xs:element name="Suburb" type="xs:string" default="" minOccurs="0"/> 
                <xs:element 
name="Postcode" type="xs:string" default="" minOccurs="0"/> 
                <xs:element name="State" type="xs:string" 
default="" minOccurs="0"/> 
                <xs:element name="Coordinates" minOccurs="0" maxOccurs="unbounded"> 
                 <xs:complexType 
> 
                  <xs:sequence> 
                   <xs:element name="XCoordinate" type="xs:string" minOccurs="0"/> 
                   <xs:element name="YCoordinate" 
type="xs:string" minOccurs="0"/> 
                   <xs:element name="Srid" type="xs:string" minOccurs="0"/> 
                  </xs:sequence 
> 
                 </xs:complexType> 
                </xs:element> 
                <xs:element name="OptusResult" minOccurs="0" maxOccurs="unbounded"> 
                 <xs 
:complexType> 
                  <xs:sequence> 
                   <xs:element name="Code" type="xs:string" minOccurs="0"/> 
                   <xs:element name="Description" 
type="xs:string" minOccurs="0"/> 
                  </xs:sequence> 
                 </xs:complexType> 
                </xs:element> 
                <xs:element name="EngineResult" 
minOccurs="0" maxOccurs="unbounded"> 
                 <xs:complexType> 
                  <xs:sequence> 
                   <xs:element name="Code" type="xs:string" 
minOccurs="0"/> 
                   <xs:element name="Description" type="xs:string" minOccurs="0"/> 
                  </xs:sequence> 
                 </xs:complexType 
> 
                </xs:element> 
               </xs:sequence> 
              </xs:complexType> 
             </xs:element> 
             <xs:element name="ServiceQualification" minOccurs 
="0" maxOccurs="unbounded"> 
              <xs:complexType> 
               <xs:sequence> 
                <xs:element name="ServiceType" type="xs:string" 
minOccurs="0"/> 
                <xs:element name="PnsaName" type="xs:string" minOccurs="0"/> 
                <xs:element name="PnsaCode" 
type="xs:string" minOccurs="0"/> 
                <xs:element name="TesaName" type="xs:string" minOccurs="0"/> 
                <xs:element 
name="TesaCode" type="xs:string" minOccurs="0"/> 
                <xs:element name="W2GInCoverage" type="xs:boolean" minOccurs 
="0"/> 
                <xs:element name="W3GOnStreet" type="xs:string" minOccurs="0"/> 
                <xs:element name="W3GInBuilding" 
type="xs:string" minOccurs="0"/> 
                <xs:element name="Frequency" type="xs:string" minOccurs="0"/> 
                <xs:element 
name="HFCServ" type="xs:string" minOccurs="0"/> 
                <xs:element name="Distance" type="xs:double" minOccurs 
="0"/> 
                <xs:element name="HOME_WIRELESS_BB" type="xs:string" minOccurs="0"/> 
                <xs:element name="HOME_WRL_BB_ROLLOUT_DT" 
type="xs:string" minOccurs="0"/> 
               </xs:sequence> 
              </xs:complexType> 
             </xs:element> 
             <xs:element name="Sap" minOccurs 
="0" maxOccurs="unbounded"> 
              <xs:complexType> 
               <xs:sequence> 
                <xs:element name="TesaCode" type="xs:string" 
minOccurs="0"/> 
                <xs:element name="OptusCode" type="xs:string" minOccurs="0"/> 
                <xs:element name="Address" 
type="xs:string" minOccurs="0"/> 
                <xs:element name="Locality" type="xs:string" minOccurs="0"/> 
                <xs:element 
name="Postcode" type="xs:string" minOccurs="0"/> 
                <xs:element name="State" type="xs:string" minOccurs 
="0"/> 
               </xs:sequence> 
              </xs:complexType> 
             </xs:element> 
            </xs:sequence> 
           </xs:complexType> 
          </xs:element> 
         </xs:sequence 
> 
        </xs:complexType> 
       </xs:element> 
      </xs:choice> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 
<diffgr:diffgram 
    xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1" 
    xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" 
> 
    <SFSQResponse 
     xmlns="http://optusgis/SFSQR.xsd"> 
     <SFSQSearch diffgr:id="SFSQSearch1" msdata:rowOrder 
="0" diffgr:hasChanges="inserted"> 
      <Name>Optus Stir Fry SQ</Name> 
      <Description>Optus Internal service qualification 
web service</Description> 
      <Version>4.0.01</Version> 
     </SFSQSearch> 
     <AddressEntered diffgr:id="AddressEntered1" 
msdata:rowOrder="0" diffgr:hasChanges="inserted"> 
      <StreetAddress/> 
      <StreetNumber>20</StreetNumber> 
      <StreetName 
>BURLINGTON</StreetName> 
      <StreetType>RD</StreetType> 
      <StreetSuffix/> 
      <Suburb>HOMEBUSH</Suburb> 
      <Postcode 
>2140</Postcode> 
      <State>NSW</State> 
     </AddressEntered> 
     <SQResults diffgr:id="SQResults1" msdata:rowOrder 
="0" diffgr:hasChanges="inserted" msdata:hiddenSQResults_Id="0"> 
      <Location diffgr:id="Location1" msdata 
:rowOrder="0" diffgr:hasChanges="inserted" msdata:hiddenLocation_Id="0" msdata:hiddenSQResults_Id="0" 
> 
       <Address diffgr:id="Address1" msdata:rowOrder="0" diffgr:hasChanges="inserted" msdata:hiddenAddress_Id 
="0" msdata:hiddenLocation_Id="0"> 
        <StreetNumber>20</StreetNumber> 
        <StreetName>BURLINGTON</StreetName> 
        <StreetType>ROAD</StreetType> 
        <Suburb>HOMEBUSH</Suburb> 
        <Postcode>2140</Postcode> 
        <State>NSW</State> 
        <Coordinates 
diffgr:id="Coordinates1" msdata:rowOrder="0" diffgr:hasChanges="inserted" msdata:hiddenAddress_Id="0" 
> 
         <XCoordinate>151.084399</XCoordinate> 
         <YCoordinate>-33.870154</YCoordinate> 
         <Srid>Future Use</Srid> 
        </Coordinates 
> 
        <OptusResult diffgr:id="OptusResult1" msdata:rowOrder="0" diffgr:hasChanges="inserted" msdata:hiddenAddress_Id 
="0"> 
         <Code>10</Code> 
         <Description>Exact or Good Match Found</Description> 
        </OptusResult> 
        <EngineResult diffgr 
:id="EngineResult1" msdata:rowOrder="0" diffgr:hasChanges="inserted" msdata:hiddenAddress_Id="0"> 
         <Code 
>100000</Code> 
         <Description>Exact Match to Street Number and Address</Description> 
        </EngineResult> 
       </Address 
> 
       <ServiceQualification diffgr:id="ServiceQualification1" msdata:rowOrder="0" diffgr:hasChanges="inserted" 
msdata:hiddenLocation_Id="0"> 
        <ServiceType>ABC</ServiceType> 
        <PnsaName>SYDNEY</PnsaName> 
        <PnsaCode>02SYDNEY 
</PnsaCode> 
        <TesaName>HOMEBUSH</TesaName> 
        <TesaCode>HOME</TesaCode> 
        <W2GInCoverage>true</W2GInCoverage> 
        <W3GOnStreet>RED</W3GOnStreet> 
        <W3GInBuilding>RED</W3GInBuilding> 
        <Frequency>2100</Frequency> 
        <Distance 
>475.734085594758</Distance> 
        <HOME_WIRELESS_BB>N</HOME_WIRELESS_BB> 
        <HOME_WRL_BB_ROLLOUT_DT/> 
       </ServiceQualification 
> 
       <Sap diffgr:id="Sap1" msdata:rowOrder="0" diffgr:hasChanges="inserted" msdata:hiddenLocation_Id="0" 
> 
        <TesaCode>HOME</TesaCode> 
        <OptusCode/> 
        <Address/> 
        <Locality/> 
        <Postcode/> 
        <State/> 
       </Sap> 
      </Location> 
     </SQResults 
> 
    </SFSQResponse> 
</diffgr:diffgram> 

我嘗試以下,但它給了我錯誤

警告:simplexml_load_string():命名空間錯誤:無法解析的QName ':複雜類型' 中

$sxe = simplexml_load_string($above_xml); 
print_r($sxe); 
die(); 

回答

1

我不確定如何解析原始的XML - 將模式定義作爲文檔的一部分。但是我所做的是在加載之前首先將其剝離。這不是理想的 - 但它似乎得到的數據...

<?php 
error_reporting (E_ALL); 
ini_set ('display_errors', 1); 

$endSchemaMarker = "</xs:schema>"; 
$preXML = file_get_contents("stackoverflow.xml"); 
$endSchema = strpos($preXML, $endSchemaMarker); 
$postXML = substr($preXML, $endSchema+strlen($endSchemaMarker)); 
$xmlData = simplexml_load_string(trim($postXML)); 
echo "Name=".(string)$xmlData->SFSQResponse->SFSQSearch->Name.PHP_EOL; 

Name=Optus Stir Fry SQ 
0

你逝去的字符串這就是爲什麼你應該使用以下功能:

SimpleXMLElement($above_xml); To simplexml_load_string($above_xml); 
+0

我想,你也可以告訴我如何訪問使用該對象的平方結果部分? – mahen3d

+0

is simplexml_load_string解決「字符串不能解析爲XML」錯誤? –

+0

不,它給我diffrente錯誤 – mahen3d