?
Solved

xml to array reading the array

Posted on 2009-05-20
4
Medium Priority
?
256 Views
Last Modified: 2013-12-12
Hi

i use the function below to parse a xml file

which outputs the xml into an array like this below

how would i just read the " [year] => 2005 "  part

as i need to be able get that and just echo it

Regards

Pete




Array
(
    [decoded_vin_data] => Array
        (
            [decoder_version] => 6.0.1
            [decoder_error] => Array
                (
                    [error_code] => Array
                        (
                        )

                    [error_message] => Array
                        (
                        )

                )

            [vin_number] => Array
                (
                    [vin_error] => Array
                        (
                            [error_code] => Array
                                (
                                )

                            [error_message] => Array
                                (
                                )

                        )

                    [common_data] => Array
                        (
                            [basic_data] => Array
                                (
                                    [year] => 2005
                                    [make] => Chrysler
                                    [model] => PT Cruiser
                                    [trim] => Touring
                                    [style] => Touring 4dr Wagon (2.4L 4cyl 5M)
                                    [vehicle_type] => Car
                                    [body_type] => Wagon
                                    [body_subtype] => Array
                                        (
                                        )

                                    [doors] => 4
                                    [model_number] => PTCP44
                                    [package_code] => Array
                                        (
                                        )

                                    [country_of_manufacture] => Array
                                        (
                                        )

                                    [plant] => TOLUCA, MEXICO
                                )

                            [specifications] => Array
                                (
                                    [category] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [drive_type] => FWD
                                                    [hub_type_4wd] => Array
                                                        (
                                                        )

                                                )

                                            [1] => Array
                                                (
                                                    [acceleration_to_100] => 0
                                                    [acceleration_to_60] => 0
                                                    [aerodynamic_drag] => 0
                                                    [braking_distance] => 0
                                                    [turning_circle] => 36.7
                                                )




<?php	
 
$clean_xml_array=xml2array('file.xml');
	echo '<pre>';
	print_r($clean_xml_array);
 
 
 
	//This function was taken from php.net (http://us2.php.net/manual/en/function.xml-parse.php)
	// user: lz_speedy at web dot de - post date:30-Dec-2008 06:20
	//this function turns an XML string in to a well structured array
	function xml2array($url, $get_attributes = 1, $priority = 'tag')
	{
	    $contents = "";
	    if (!function_exists('xml_parser_create'))
	    {
	        return array ();
	    }
	    $parser = xml_parser_create('');
	    if (!($fp = @ fopen($url, 'rb')))
	    {
	        return array ();
	    }
	    while (!feof($fp))
	    {
	        $contents .= fread($fp, 8192);
	    }
	    fclose($fp);
	    xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8");
	    xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
	    xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
	    xml_parse_into_struct($parser, trim($contents), $xml_values);
	    xml_parser_free($parser);
	    if (!$xml_values)
	        return; //Hmm...
	    $xml_array = array ();
	    $parents = array ();
	    $opened_tags = array ();
	    $arr = array ();
	    $current = & $xml_array;
	    $repeated_tag_index = array ();
	    foreach ($xml_values as $data)
	    {
	        unset ($attributes, $value);
	        extract($data);
	        $result = array ();
	        $attributes_data = array ();
	        if (isset ($value))
	        {
	            if ($priority == 'tag')
	                $result = $value;
	            else
	                $result['value'] = $value;
	        }
	        if (isset ($attributes) and $get_attributes)
	        {
	            foreach ($attributes as $attr => $val)
	            {
	                if ($priority == 'tag')
	                    $attributes_data[$attr] = $val;
	                else
	                    $result['attr'][$attr] = $val; //Set all the attributes in a array called 'attr'
	            }
	        }
	        if ($type == "open")
	        {
	            $parent[$level -1] = & $current;
	            if (!is_array($current) or (!in_array($tag, array_keys($current))))
	            {
	                $current[$tag] = $result;
	                if ($attributes_data)
	                    $current[$tag . '_attr'] = $attributes_data;
	                $repeated_tag_index[$tag . '_' . $level] = 1;
	                $current = & $current[$tag];
	            }
	            else
	            {
	                if (isset ($current[$tag][0]))
	                {
	                    $current[$tag][$repeated_tag_index[$tag . '_' . $level]] = $result;
	                    $repeated_tag_index[$tag . '_' . $level]++;
	                }
	                else
	                {
	                    $current[$tag] = array (
	                        $current[$tag],
	                        $result
	                    );
	                    $repeated_tag_index[$tag . '_' . $level] = 2;
	                    if (isset ($current[$tag . '_attr']))
	                    {
	                        $current[$tag]['0_attr'] = $current[$tag . '_attr'];
	                        unset ($current[$tag . '_attr']);
	                    }
	                }
	                $last_item_index = $repeated_tag_index[$tag . '_' . $level] - 1;
	                $current = & $current[$tag][$last_item_index];
	            }
	        }
	        elseif ($type == "complete")
	        {
	            if (!isset ($current[$tag]))
	            {
	                $current[$tag] = $result;
	                $repeated_tag_index[$tag . '_' . $level] = 1;
	                if ($priority == 'tag' and $attributes_data)
	                    $current[$tag . '_attr'] = $attributes_data;
	            }
	            else
	            {
	                if (isset ($current[$tag][0]) and is_array($current[$tag]))
	                {
	                    $current[$tag][$repeated_tag_index[$tag . '_' . $level]] = $result;
	                    if ($priority == 'tag' and $get_attributes and $attributes_data)
	                    {
	                        $current[$tag][$repeated_tag_index[$tag . '_' . $level] . '_attr'] = $attributes_data;
	                    }
	                    $repeated_tag_index[$tag . '_' . $level]++;
	                }
	                else
	                {
	                    $current[$tag] = array (
	                        $current[$tag],
	                        $result
	                    );
	                    $repeated_tag_index[$tag . '_' . $level] = 1;
	                    if ($priority == 'tag' and $get_attributes)
	                    {
	                        if (isset ($current[$tag . '_attr']))
	                        {
	                            $current[$tag]['0_attr'] = $current[$tag . '_attr'];
	                            unset ($current[$tag . '_attr']);
	                        }
	                        if ($attributes_data)
	                        {
	                            $current[$tag][$repeated_tag_index[$tag . '_' . $level] . '_attr'] = $attributes_data;
	                        }
	                    }
	                    $repeated_tag_index[$tag . '_' . $level]++; //0 and 1 index is already taken
	                }
	            }
	        }
	        elseif ($type == 'close')
	        {
	            $current = & $parent[$level -1];
	        }
	    }
	    return ($xml_array);
	}
 
?>

Open in new window

0
Comment
Question by:peter2001
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
4 Comments
 
LVL 7

Expert Comment

by:szewkam
ID: 24435767
hmm... echo $source["decoded_vin_data"]["vin_number"]["common_data"]["year"]; ?
0
 
LVL 7

Accepted Solution

by:
szewkam earned 300 total points
ID: 24435783
sorry, i one mistake, i didn't noticed one level:
echo $source["decoded_vin_data"]["vin_number"]["common_data"]["basic_data"]["year"];
0
 
LVL 1

Author Comment

by:peter2001
ID: 24436148
Hi
thanks that's the bit that was throwing me the order

cheers for you help
0
 
LVL 1

Author Closing Comment

by:peter2001
ID: 31583695
thank you
0

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Browsing the questions asked to the Experts of this forum, you will be amazed to see how many times people are headaching about monster regular expressions (regex) to select that specific part of some HTML or XML file they want to extract. The examp…
This article discusses four methods for overlaying images in a container on a web page
The viewer will learn how to dynamically set the form action using jQuery.
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.
Suggested Courses

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question