繁体   English   中英

在PHP中解析Soap Response?

[英]Parsing Soap Response in PHP?

有人可以帮我解析以下肥皂响应到HTML表吗?

<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':complexType'

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

我不确定如何按原样解析原始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

您正在传递字符串,这就是为什么您应该使用以下功能:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM