Reputation: 7724
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();
Upvotes: 0
Views: 323
Reputation: 57121
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
Upvotes: 1
Reputation: 6650
you are passing string thats why you should use below function :
SimpleXMLElement($above_xml); To simplexml_load_string($above_xml);
Upvotes: 0