Parsowanie xml do tablicy

Odpowiedz Nowy wątek
2012-08-09 11:11
0

Witam.
Mam pewien problem. Chciałbym wczytać drzewo xml do tablicy, która ajaxem poleci do strony wyjściowej i wyświetlana będzie w obiekcie html <select>.

Dokument xml:

<pages>
    <index-p1 name="Start"/>
    <oferta-p2 name="Oferta">
        <projekt-p4 name="Projekt">
            <opis-p5 name="Opis"/>
        </projekt-p4>
        <foto-p6 name="Foto"/>
    </oferta-p2>
    <kontakt-p3 name="Kontakt"/>
</pages>

Kod PHP:

function xml2phpArray($xml,$arr,$x,$s)
{
    $z = 0;
        foreach($xml->children() as $b)
    { 
                $a = $b->getName().'';
        $c = $b->attributes()->name.'';
                if(!$b->children())
        { 
            //$arr[$x][0] = $a.''; 
            //$arr[$x][1] = $c.''; 
            //echo $x.'-'.$arr[$x][0].', '; 
                } 
                else
        {
            $arr[$x][0] = $a; 
            $arr[$x][1] = $c;

            if($z == 0)$s = $s.'»';
            echo $s.' '.$arr[$x][0].', ';

            xml2phpArray($b,$arr,$x,$s);
                }
        $x++; 
        $z++;

        } 
        return $arr;
}

$xml = simplexml_load_string(file_get_contents('../content.xml'))->pages;
$array = xml2phpArray($xml,array(),0,'');
echo json_encode($array);

Wynik:

» index-p1, » oferta-p2, »» projekt-p4, »»» opis-p5, »» foto-p6, » kontakt-p3, [["index-p1","Start"],["oferta-p2","Oferta"],["kontakt-p3","Kontakt"]]

Elementy wyświetlają się po echo w odpowiedniej kolejności lecz nie wiem jak w takiej kolejności zapisać je do tablicy.
Bardzo prawdopodobne jest również to, że zabieram się do tego od złej strony. Może jest jakiś łatwiejszy sposób??


"Wiadomo, że taki a taki pomysł jest nie do zrealizowania. Ale żyje sobie jakiś nieuk, który o tym nie wie. I on właśnie dokonuje tego wynalazku." - (Albert Einstein)
edytowany 2x, ostatnio: zOOm3k, 2012-08-09 11:27

Pozostało 580 znaków

2012-08-09 16:49

Sam doszedłem :) Dla zainteresowanych...

Funkcja wygląda następująco:

function xml2phpArray($xml,$arr,$s)
{
    $z=0;
        foreach($xml->children() as $b)
    {
        if($z == 0)$s = $s.'&laquo;'; 
                $a = $b->getName();
        $c = $s.' '.$b->attributes()->name;

        array_push($arr,array($a,$c));

        $arr2 = array();
        $arr2 = xml2phpArray($b,$arr2,$s);

        for($x=0;$x<count($arr2);$x++)
        {array_push($arr,$arr2[$x]);}
        $z++;   
        }
        return $arr;    
}
$xml = simplexml_load_file('../mycms_content.xml')->pages;
$array = xml2phpArray($xml,array(),'');
echo json_encode($array);

a wynik z poziomami drzewa xml do wrzucenia w <select>:
[["index-p1","« Start"],["oferta-p2","« Oferta"],["projekt-p4","«« Projekt"],["opis-p5","««« Opis"],["foto-p6","«« Foto"],["kontakt-p3","« Kontakt"]]


"Wiadomo, że taki a taki pomysł jest nie do zrealizowania. Ale żyje sobie jakiś nieuk, który o tym nie wie. I on właśnie dokonuje tego wynalazku." - (Albert Einstein)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0