Hi Pros
I need help to read xml to array,
xml file structure is unknown, and has many elements and subelements,
so it should be imported to multiple array.
here is xml file as example:
file name: test.xml
my php code is not working, here is it:
the problem is : i cann't build xml data (elements,child nodes) properly to array.
thank you
I need help to read xml to array,
xml file structure is unknown, and has many elements and subelements,
so it should be imported to multiple array.
here is xml file as example:
file name: test.xml
Code:
<?xml version="1.0" encoding="windows-1256" ?> <books id="1"> <category id="1" name="cat 1"> <book id="1" name="cat 1 book1"> <minibook id="1" name="cat 1 - book1 - minibook 1"></minibook> <minibook id="2" name="cat 1 - book1 - minibook 2"></minibook> <minibook id="3" name="cat 1 - book1 - minibook 3"></minibook> <minibook id="4" name="cat 1 - book1 - minibook 4"></minibook> </book> <book id="2" name="cat 1 book2"> <minibook id="1" name="cat 1 - book2 - minibook 1"></minibook> <minibook id="2" name="cat 1 - book2 - minibook 2"></minibook> <minibook id="3" name="cat 1 - book2 - minibook 3"></minibook> <minibook id="4" name="cat 1 - book2 - minibook 4"></minibook> </book> <book id="3" name="cat 1 book3"> <minibook id="1" name="cat 1 - book3 - minibook 1"></minibook> <minibook id="2" name="cat 1 - book3 - minibook 2"></minibook> <minibook id="3" name="cat 1 - book3 - minibook 3"></minibook> <minibook id="4" name="cat 1 - book3 - minibook 4"></minibook> </book> </category> <category id="2" name="cat 2"> <book id="1" name="cat 2 book1"> <minibook id="1" name="cat 2 - book1 - minibook 1"></minibook> <minibook id="2" name="cat 2 - book1 - minibook 2"></minibook> <minibook id="3" name="cat 2 - book1 - minibook 3"></minibook> <minibook id="4" name="cat 2 - book1 - minibook 4"></minibook> </book> <book id="2" name="cat 2 book2"> <minibook id="1" name="cat 2 - book2 - minibook 1"></minibook> <minibook id="2" name="cat 2 - book2 - minibook 2"></minibook> <minibook id="3" name="cat 2 - book2 - minibook 3"></minibook> <minibook id="4" name="cat 2 - book2 - minibook 4"></minibook> </book> <book id="3" name="cat 2 book3"> <minibook id="1" name="cat 2 - book3 - minibook 1"></minibook> <minibook id="2" name="cat 2 - book3 - minibook 2"></minibook> <minibook id="3" name="cat 2 - book3 - minibook 3"></minibook> <minibook id="4" name="cat 2 - book3 - minibook 4"></minibook> </book> </category> <category id="3" name="cat 3"> <book id="1" name="cat 3 book1"> <minibook id="1" name="cat 3 - book1 - minibook 1"></minibook> <minibook id="2" name="cat 3 - book1 - minibook 2"></minibook> <minibook id="3" name="cat 3 - book1 - minibook 3"></minibook> <minibook id="4" name="cat 3 - book1 - minibook 4"></minibook> </book> <book id="2" name="cat 3 book2"> <minibook id="1" name="cat 3 - book2 - minibook 1"></minibook> <minibook id="2" name="cat 3 - book2 - minibook 2"></minibook> <minibook id="3" name="cat 3 - book2 - minibook 3"></minibook> <minibook id="4" name="cat 3 - book2 - minibook 4"></minibook> </book> <book id="3" name="cat 3 book3"> <minibook id="1" name="cat 3 - book3 - minibook 1"></minibook> <minibook id="2" name="cat 3 - book3 - minibook 2"></minibook> <minibook id="3" name="cat 3 - book3 - minibook 3"></minibook> <minibook id="4" name="cat 3 - book3 - minibook 4"></minibook> </book> </category> <category id="4" name="cat 4"> <book id="1" name="cat 4 book1"> <minibook id="1" name="cat 4 - book1 - minibook 1"></minibook> <minibook id="2" name="cat 4 - book1 - minibook 2"></minibook> <minibook id="3" name="cat 4 - book1 - minibook 3"></minibook> <minibook id="4" name="cat 4 - book1 - minibook 4"></minibook> </book> <book id="2" name="cat 4 book2"> <minibook id="1" name="cat 4 - book2 - minibook 1"></minibook> <minibook id="2" name="cat 4 - book2 - minibook 2"></minibook> <minibook id="3" name="cat 4 - book2 - minibook 3"></minibook> <minibook id="4" name="cat 4 - book2 - minibook 4"></minibook> </book> <book id="3" name="cat 4 book3"> <minibook id="1" name="cat 4 - book3 - minibook 1"></minibook> <minibook id="2" name="cat 4 - book3 - minibook 2"></minibook> <minibook id="3" name="cat 4 - book3 - minibook 3"></minibook> <minibook id="4" name="cat 4 - book3 - minibook 4"></minibook> </book> </category> <category id="5" name="cat 5"> <book id="1" name="cat 5 book1"> <minibook id="1" name="cat 5 - book1 - minibook 1"></minibook> <minibook id="2" name="cat 5 - book1 - minibook 2"></minibook> <minibook id="3" name="cat 5 - book1 - minibook 3"></minibook> <minibook id="4" name="cat 5 - book1 - minibook 4"></minibook> </book> <book id="2" name="cat 5 book2"> <minibook id="1" name="cat 5 - book2 - minibook 1"></minibook> <minibook id="2" name="cat 5 - book2 - minibook 2"></minibook> <minibook id="3" name="cat 5 - book2 - minibook 3"></minibook> <minibook id="4" name="cat 5 - book2 - minibook 4"></minibook> </book> <book id="3" name="cat 5 book3"> <minibook id="1" name="cat 5 - book3 - minibook 1"></minibook> <minibook id="2" name="cat 5 - book3 - minibook 2"></minibook> <minibook id="3" name="cat 5 - book3 - minibook 3"></minibook> <minibook id="4" name="cat 5 - book3 - minibook 4"></minibook> </book> </category> </books>
Code:
<?php //get Element attributes function get_attributes($element){ $attrib_array=array(); $element_attributes=$element->attributes; foreach($element_attributes as $attrib){ $attrib_array[$attrib->name]=$attrib->value; } return $attrib_array; } //get xml Elements to array function get_elements($Elements_list){ foreach($Elements_list as $xml_element){ // NodeType (1) means this is Element not #text or CDATA if($xml_element->nodeType=='1'){ //get Element id for Array Key $elemid=$xml_element->getAttribute('id'); $elemtagname=$xml_element->tagName; $currentlevel=array(); //Get Element Attributes if it has //If this element Has Attributes it will be added to Array '$attr_array' $attr_array=array(); if($xml_element->hasAttributes()){ $attr_array=$this->get_attributes($xml_element); } $currentlevel[$elemid]['tagname']=$xml_element->tagName; $currentlevel[$elemid]['attribute']=$attr_array; $currentlevel[$elemid]['content']=$xml_element->nodeValue; //get child Nodes for every Element (if exists) if($xml_element->hasChildNodes()){ $currentlevel[$elemid]['child']=$this->get_elements($xml_element->childNodes); } } } return $currentlevel; } //cals Function $xml_file=new DOMDocument(); $xml_file->load("test.xml"); $xml_childs=$xml_file->getElementsByTagName("books"); $xml_to_array=get_elements($xml_childs); // Array $xml_to_array should hold all Xml data ?>
thank you
Comment