dtz8044 2017-09-25 05:37
浏览 29
已采纳

解析PHP中的肥皂反应?

Can some one help me to parse following soap response into HTML table ?

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

I tried following but it gives me error

Warning: simplexml_load_string(): namespace error : Failed to parse QName ':complexType' in

 $sxe = simplexml_load_string($above_xml);
print_r($sxe);
die();
  • 写回答

2条回答 默认 最新

  • doubaran2438 2017-09-25 07:10
    关注

    I'm not sure how you can parse the original XML as is - there is the schema definition as part of the document. But what I've done is to first strip that off before loading it. It's not ideal - but it seems to get at the data...

    <?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;
    

    gives

    Name=Optus Stir Fry SQ
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题