I have an API call which returns a XML string, I have converted that response with new SimpleXmlElement so that it returns me a XML object. Below is the result
SimpleXMLElement Object
(
[0] => <root>
<PINCODELIST>
<PINCODE>152001</PINCODE>
<CITYNAME>GURDASPUR</CITYNAME>
<ACTIVEFLAG>Y</ACTIVEFLAG>
<EDIT_DATE>09 May 2015 10:47:20</EDIT_DATE>
<ROUTINGCODE>N/PB/1026/FRZPR</ROUTINGCODE>
</PINCODELIST>
</root>
)
How do I access each element in root tag assuming it can have X number of PINCODELIST tags.
I tried $res[0]->root but it gaves me SimpleXMLElement Object ( )
Any ideas ?
I can't comment on SimpleXmlElement
or the associated methods but using the standard DOMDocument
is fairly straightforward. It takes a string as input, though can easily be modifed to load an XML file if preferred.
/* helper function to return the value of a node */
function gnv( $node,$tag ){
return $node->getElementsByTagName( $tag )->item(0)->nodeValue;
}
$data="
<root>
<PINCODELIST>
<PINCODE>152001</PINCODE>
<CITYNAME>GURDASPUR</CITYNAME>
<ACTIVEFLAG>Y</ACTIVEFLAG>
<EDIT_DATE>09 May 2015 10:47:20</EDIT_DATE>
<ROUTINGCODE>N/PB/1026/FRZPR</ROUTINGCODE>
</PINCODELIST>
<PINCODELIST>
<PINCODE>152003</PINCODE>
<CITYNAME>Mumbai</CITYNAME>
<ACTIVEFLAG>N</ACTIVEFLAG>
<EDIT_DATE>09 May 2015 11:21:20</EDIT_DATE>
<ROUTINGCODE>O/PB/1036/FRZPR</ROUTINGCODE>
</PINCODELIST>
</root>";
$url='http://<SERVER>/jhds/services/ws_webx_dataexchange.asmx/PincodeSync?FromDate=&CustomerCode=CC000200115';
$data=file_get_contents( $url );
/* For storing pincodes and data */
$codes=array();
libxml_use_internal_errors( true );
$dom=new DOMDocument;
$dom->validateOnParse=false;
$dom->standalone=true;
$dom->preserveWhiteSpace=true;
$dom->strictErrorChecking=false;
$dom->substituteEntities=false;
$dom->recover=true;
$dom->formatOutput=false;
/* Here you load your xml data as a string */
$dom->loadXML( html_entity_decode( $data ) );
$parse_errs=serialize( libxml_get_last_error() );
libxml_clear_errors();
$pincodes=$dom->getElementsByTagName('PINCODELIST');
foreach( $pincodes as $index => $node ) {
if( $node->nodeType==XML_ELEMENT_NODE ){
$codes[ gnv( $node, 'PINCODE' ) ]=(object)array(
'CITYNAME' => gnv( $node, 'CITYNAME' ),
'ACTIVEFLAG' => gnv( $node, 'ACTIVEFLAG' ),
'EDIT_DATE' => gnv( $node, 'EDIT_DATE' ),
'ROUTINGCODE' => gnv( $node, 'ROUTINGCODE' )
);
}
}
$dom=null;
/* debug output */
echo '<pre>',print_r($codes,true),'</pre>';
/* To access specific items by their pincode later */
echo $codes['152001']->ROUTINGCODE;