Forget myt post, its a stupid error from my part because of object references and stuff like that. I'll fix it myself.
"Mathieu Dumoulin" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > PHP 4.3.7 on Linux Red Hat 7.3 full patch and updates, Expat expat_1.95.2 > > Problem: > > I am reading the XML file below and at path: > > advantage/route/origin/status/ > > The CDATA inside the STATUS node cannot be read (Current value 1900), there > isnt much information on how to use the EXPAT library on PHP.Net apart from > the extensive definition of all functions so i'm not sure im using EXPAT the > correct way. Please tell me if im doing something wrong, here is my code and > the XML file is further below: > > ************************ > * PHP CODE * > ************************ > > //Load the XML like it was a XML reponse > $xml = implode('', file('xml.xml')); > echo '<PRE>'.str_replace(array('<', '>'), array('<', '>'), > $xml).'</PRE>'; > > /*For now all objects are empty shells without data in them, the XML parser > will link everything together nicely > and will add the CDATA for objects if there is some. Later we will add the > standard options to each class > and create functions for output.*/ > > //Contains an advantage server response, very basic object with only one > thing below > class advantage_node { > function advantage_response() {} > } > > //Contains an advantage server data representing a route > class route_node { > function route_node() {} > } > > //Contains an advantage server data representing a parsed input data from > the server > class origin_node { > function origin_node() {} > } > > //Contains an advantage server data representing a status > class status_node { > function status_node() {} > } > > //Contains an advantage server data representing a location > class location_node { > function location_node() {} > } > > //Contains an advantage server data representing a number > class number_node { > function number_node() {} > } > > //In charge of making the object tree and handling first level objects > function xml_to_class_tag_start($parser, $element, $attributes){ > $element_class = $element.'_node'; > if(class_exists($element_class) && > isset($GLOBALS['element_levels'][$GLOBALS['element_level']-1])){ > $new_element = new $element_class; > if(is_array($attributes)){ foreach($attributes as $attribute => $value){ > $new_element->$attribute = $value; > }} > if($GLOBALS['element_level']-1 >= 0){ > $GLOBALS['element_levels'][$GLOBALS['element_level']-1]->$element = > &$new_element; > } > $GLOBALS['element_levels'][$GLOBALS['element_level']] = &$new_element; > } > ++$GLOBALS['element_level']; > } > > //In charge of closing the current object and rolling back to the previous > one > function xml_to_class_tag_end($parser, $element){ > if($GLOBALS['element_level'] > 1){ > unset($GLOBALS['element_levels'][$GLOBALS['element_level']]); > } > $GLOBALS['element_level']--; > } > > function xml_to_class_tag_data($parser, $data){ > if(trim($data) != ''){ > $GLOBALS['element_levels'][$GLOBALS['element_level']]->cdata = $data; > } > } > > //Setup the objects > $element_level = 0; > $element_levels = array(-1 => ''); > > //Start the XML parsing > $parser = xml_parser_create(); > xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 1); > xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 0); > xml_set_element_handler($parser, 'xml_to_class_tag_start', > 'xml_to_class_tag_end'); > xml_set_character_data_handler($parser, 'xml_to_class_tag_data'); > xml_parse($parser, $xml); > xml_parser_free($parser); > > //Output > echo '<pre>'.print_r($element_levels[0], true).'</pre>'; > ************************* RESULT > *************************advantage_node Object > ( > [ROUTE] => route_node Object > ( > [STATUS] => 0 > [ORIGIN] => origin_node Object > ( > [COUNT] => 1 > [STATUS] => status_node Object > ( > ) > > [LOCATION] => location_node Object > ( > [NUMBER] => number_node Object > ( > ) > > ) > > ) > > ) > > )************************ > * XML DATA * > ************************ > > <advantage> > - > <route status="0"> > - > <parameters> > <clientId>[protected]</clientId> > <destcountry>ca</destcountry> > <destpostalcode>h1p 2w8</destpostalcode> > <origcountry>ca</origcountry> > <origpostalcode>h1z 2l2</origpostalcode> > <transaction>route</transaction> > </parameters> > - > <input> > - > <origin count="1"> > - > <location> > <postalCode>h1z 2l2</postalCode> > <country>ca</country> > </location> > </origin> > - > <destination count="1"> > - > <location> > <postalCode>h1p 2w8</postalCode> > <country>ca</country> > </location> > </destination> > </input> > - > <origin count="1"> > <status>1900</status> > - > <location> > <number>1</number> > <city>MONTREAL</city> > <stateProvince>QC</stateProvince> > <postalCode>H1Z 2L2</postalCode> > <country>CA</country> > <latitude>45.569129</latitude> > <longitude>-73.601440</longitude> > <geocodeQuality>ZIP</geocodeQuality> > <iconId>9191</iconId> > - > <map> > <height>119</height> > <width>198</width> > <type>8</type> > <mapStyle>default</mapStyle> > - > <request> > [useless junk] > </request> > </map> > </location> > </origin> > - > <destination count="1"> > <status>1900</status> > - > <location> > <number>1</number> > <city>SAINT-LEONARD</city> > <stateProvince>QC</stateProvince> > <postalCode>H1P 2W8</postalCode> > <country>CA</country> > <latitude>45.598209</latitude> > <longitude>-73.594200</longitude> > <geocodeQuality>ZIP</geocodeQuality> > <iconId>9192</iconId> > - > <map> > <height>119</height> > <width>198</width> > <type>9</type> > <mapStyle>default</mapStyle> > - > <request>[useless junk]</request> > </map> > </location> > </destination> > - > <overviewMap> > <height>342</height> > <width>594</width> > <type>4</type> > <zoomLevel>8</zoomLevel> > <latitude>45.583550</latitude> > <longitude>-73.597881</longitude> > <mapStyle>default</mapStyle> > - > <request>[useless junk]</request> > <mapSessionId>40e2d674-003a-02b7-59c5-0ec30b00010f</mapSessionId> > </overviewMap> > - > <maneuvers count="6"> > - > <maneuver> > <number>1</number> > - > <text> > Start out going Southwest on BOULEVARD CRÉMAZIE E toward 20E AVE. > </text> > <time>6</time> > <distance units="mi">0.02</distance> > </maneuver> > - > <maneuver> > <number>2</number> > <text>Turn RIGHT onto 20E AVE.</text> > <time>36</time> > <distance units="mi">0.14</distance> > </maneuver> > - > <maneuver> > <number>3</number> > <text>Turn RIGHT onto RUE JARRY E.</text> > <time>234</time> > <distance units="mi">1.13</distance> > </maneuver> > - > <maneuver> > <number>4</number> > <text>Turn LEFT onto BOULEVARD LACORDAIRE.</text> > <time>132</time> > <distance units="mi">0.78</distance> > </maneuver> > - > <maneuver> > <number>5</number> > <text>Turn RIGHT onto RUE BELHERBE.</text> > <time>108</time> > <distance units="mi">0.43</distance> > </maneuver> > - > <maneuver> > <number>6</number> > <text>Turn LEFT onto RUE VAL MARIE.</text> > <time>24</time> > <distance units="mi">0.14</distance> > </maneuver> > <totalTime>540</totalTime> > <totalDistance units="mi">2.64</totalDistance> > </maneuvers> > </route> > </advantage> -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php