Sorry. Here's the code:
$x='<?xml version="1.0" encoding="utf-8"?>
<DATA>
<REPORT_DATE><![CDATA['.$string.']]></REPORT_DATE>
<IP_RECORD id="8814">
<ADDRESS>67.31.42.63</ADDRESS>
<HOSTNAME id="2893">dialup-67.31.42.63.Dial1.NewYork1.Level3.net</HOSTNAME>
<OWNER>Broomfield CO 80021 United States</OWNER>
</IP_RECORD>
<IP_RECORD id="2600">
<ADDRESS>152.163.253.33</ADDRESS>
<OWNER>VA 20166 United States</OWNER>
</IP_RECORD>
</DATA>';
class XmlC {
var $xml_data;
var $obj_data;
var $pointer;
function XmlC() { // constructor
}
function Set_xml_data( &$xml_data ) {
$this->index = 0;
$this->pointer[] = &$this->obj_data;
$this->xml_data = $xml_data;
$this->xml_parser = xml_parser_create( "UTF-8" );
xml_parser_set_option( $this->xml_parser, XML_OPTION_CASE_FOLDING, false );
xml_set_object( $this->xml_parser, &$this );
xml_set_element_handler( $this->xml_parser, "_startElement", "_endElement");
xml_set_character_data_handler( $this->xml_parser, "_cData" );
xml_parse( $this->xml_parser, $this->xml_data, true );
xml_parser_free( $this->xml_parser );
}
function _startElement( $parser, $tag, $attributeList ) {
foreach( $attributeList as $name => $value ) {
$value = $this->_cleanString( $value );
$object->$name = $value;
}
eval( "\$this->pointer[\$this->index]->" . $tag . "[] = \$object;" );
eval( "\$size = sizeof( \$this->pointer[\$this->index]->" . $tag . " );" );
eval( "\$this->pointer[] = &\$this->pointer[\$this->index]->" . $tag . "[\$size-1];" );
$this->index++;
}
function _endElement( $parser, $tag ) {
array_pop( $this->pointer );
$this->index--;
}
function _cData( $parser, $data ) {
if( trim( $data ) ) {
$this->pointer[$this->index] = trim( $data );
}
}
function _cleanString( $string ) {
return utf8_decode( trim( $string ) );
}
} // end XmlC Class
// parsing the filename.xml file for IPAddress and it's owner
#$filename = "filename.xml"; // used if you want to read from a file instead of a string
$xmlC = new XmlC(); // |
#$xml_data = file_get_contents( $filename ); <--
$xmlC->Set_XML_data( $x );
//retriving information stored in Address and Owner arrays - sizeof() == count()
$counting=count($xmlC->obj_data->DATA[0]->IP_RECORD); //to find out the number of elements in the array
$IPADDR="";
$OWNER="";
$REPORTDATE="";
for($i=0;$i<$counting;++$i) {
$IPID[$i]=$xmlC->obj_data->DATA[0]->IP_RECORD[$i]->id[0]; # reading attribute value
$REPORTDATE[$i]=$xmlC->obj_data->DATA[0]->REPORT_DATE[0]; # reading element values...
$IPADDR[$i]=$xmlC->obj_data->DATA[0]->IP_RECORD[$i]->ADDRESS[0];
$OWNER[$i]=$xmlC->obj_data->DATA[0]->IP_RECORD[$i]->OWNER[0];
}
for($i=0;$i<$counting;++$i) {
echo "$IPADDR[$i] | $OWNER[$i] | $IPID[$i]<BR>";
}
echo( "<pre>\n" ); // shows output in browser
print_r( $xmlC->obj_data );
echo( "</pre>\n" );