Gå til innhold

xml til arrays


Anbefalte innlegg

Jeg har laga et script som gjør om xml til arrays i php, der attributene ligger i array['attributs'] og innholdet ligger i array['value'].

Hvordan får jeg fks array['serverarray'] til å legge seg inni array['configure'] ?

 

XML-fil:

<?xml version="1.0"?>
<configure>
   <serverarray default="_GET" test="test">_GET</serverarray>   
</configure>

 

PHP:

<pre><?php
class xmlget
{
public $file, $lastKey;
public $depth = array();
private $out = array(), $xmlParser;


   public function __construct($file)
   {

 

       if(!$this->file = file_get_contents($file))
       {
   
           throw new exception('Kunne ikke åpne xmlfil');
   
   
       }

   }
   

   public function __destruct()
   {
       echo '<pre>';
       print_r($this->out);
       echo '</pre>';
       xml_parser_free($this->xmlParser);  
   }

   function elemBegin($parser, $name, $attrs)
   {
           $this->lastKey = $name;
           $this->out[$name]['attributs'] = $attrs;
     
     
   }

   function elemEnd($parser, $name)
   {
       /*$this->depth[$parser]--;*/
   }
   
   function elemData($parser, $data)
   {

   
   $data = trim($data);
   
       if(!(empty($data)))
       {
           $this->out[$this->lastKey]['value'][] = $data;
       }
   }


   function parse()
   {
       $this->xmlParser = xml_parser_create_ns();
       xml_parser_set_option($this->xmlParser, XML_OPTION_CASE_FOLDING, 0);
       xml_set_element_handler($this->xmlParser, array($this, 'elemBegin'), array($this, 'elemEnd'));
       xml_set_character_data_handler($this->xmlParser, array($this, 'elemData'));

       if (!xml_parse($this->xmlParser, $this->file))
       {
           throw new exception(sprintf("XML error: %s på linje %d", xml_error_string(xml_get_error_code($this->xmlParser)), xml_get_current_line_number($this->xmlParser)));
       }           
   }


}

   try
   {
       $xml = new xmlget('xml.xml', 'r');
       $xml->parse();
   }
   catch(exception $xmlerror)
   {

       echo 'Det skjedde desverre en feil:' . $xmlerror->getMessage();
   

   }

?></pre>

 

Dette vil gi outputen:

Array
(
   [configure] => Array
       (
           [attributs] => Array
               (
               )

       )

   [serverarray] => Array
       (
           [attributs] => Array
               (
                   [default] => _GET
                   [test] => test
               )

           [value] => Array
               (
                   [0] => _GET
               )

       )

)

mens jeg ønsker at den gir følgende:

Array
(
   [configure] => Array
       (
           [attributs] => Array
               (
               )

           [serverarray] => Array
               (
                   [attributs] => Array
                       (
                           [default] => _GET
                           [test] => test
                       )

                   [value] => Array
                       (
                           [0] => _GET
                       )

               )
               
               
        )

)

Hvordan??

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...