Solved

xml to array reading the array

Posted on 2009-05-20
4
247 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 75 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

Salesforce Has Never Been Easier

Improve and reinforce salesforce training & adoption using WalkMe's digital adoption platform. Start saving on costly employee training by creating fast intuitive Walk-Thrus for Salesforce. Claim your Free Account Now

Question has a verified solution.

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

Nothing in an HTTP request can be trusted, including HTTP headers and form data.  A form token is a tool that can be used to guard against request forgeries (CSRF).  This article shows an improved approach to form tokens, making it more difficult to…
Introduction This article is intended for those who are new to PHP error handling (https://www.experts-exchange.com/articles/11769/And-by-the-way-I-am-New-to-PHP.html).  It addresses one of the most common problems that plague beginning PHP develop…
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.

739 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