Pobieranie katalogów z xml do tablicy wielowymiarowej

0

Witam serdecznie wszystkich.
Mam plik xml
i próbuję z niego odczytać listę katalogów tzn.
Załóżmy że mamy w xml

 id - nr katalogu
nazwa - nazwa katalogu

Wygląda to np. tak

Programy
+Systemowe
++Programy Antywirusowe
++Zmiana Ustawień Systemu
Filmy
+Lektor
++Polskie
++Angielskie
+++Animowane
+Napisy
+Dubbing

Jak mogę to za pomocą php odczytać do tablicy wielowymiarowej w celu dalszej obróbki ??

Dziękuję serdecznie za pomoc.

0

Ale pokaż ten XML, bo przedstawiłeś jakieś drzewo, ale takie drzewo w XML można przedstawić na kilka sposobów (a wliczając różne nazwy elementów/atrybutów - nieograniczoną ilość sposobów).

0

Próbowałem obrobić to w ten sposób

$xm=@simplexml_load_string($xml); // - Document Xml który znajduje się poniżej
$array_list=array();

$index=0;
foreach($xm->folders->FolderInfo as $folder)
{
        //Katalog
    $array_list[$index]=array(array('id'=>$folder->id,'name'=>$folder->name));
        
    foreach($folder->folders->FolderInfo as $katalog)
    {
        $tbl[]=array('id'=>$katalog->id,'name'=>$katalog->name);
    }
    $array_list[$index][0][]=$tbl;
    $tbl=array();
    $index++;
}


<?xml version="1.0" encoding="utf-8"?>
<a:folder><id>0</id><name>User</name><passwd>false</passwd><hidden>false</hidden><adult>false</adult><freePoints i:nil="true"/><freeTransfer i:nil="true"/><publicUpload>false</publicUpload><folders><FolderInfo><id>5</id><name>Katalog_1</name><passwd>false</passwd><hidden>false</hidden><adult>false</adult><freePoints i:nil="true"/><freeTransfer i:nil="true"/><publicUpload>false</publicUpload><folders><FolderInfo><id>7</id><name>SubKatalog_1</name><passwd>false</passwd><hidden>false</hidden><adult>false</adult><freePoints i:nil="true"/><freeTransfer i:nil="true"/><publicUpload>false</publicUpload><folders><FolderInfo><id>8</id><name>Podkatalog_1</name><passwd>false</passwd><hidden>false</hidden><adult>false</adult><freePoints i:nil="true"/><freeTransfer i:nil="true"/><publicUpload>false</publicUpload><folders i:nil="true"/><password i:nil="true"/><view><gallery>false</gallery></view><description i:nil="true"/><chomikId>00000</chomikId></FolderInfo></folders><password i:nil="true"/><view><gallery>false</gallery></view><description i:nil="true"/><chomikId>00000</chomikId></FolderInfo></folders><password i:nil="true"/><view><gallery>false</gallery></view><description i:nil="true"/><chomikId>00000</chomikId></FolderInfo><FolderInfo><id>6</id><name>Katalog_2</name><passwd>false</passwd><hidden>false</hidden><adult>false</adult><freePoints i:nil="true"/><freeTransfer i:nil="true"/><publicUpload>false</publicUpload><folders i:nil="true"/><password i:nil="true"/><view><gallery>false</gallery></view><description i:nil="true"/><chomikId>00000</chomikId></FolderInfo></folders><password i:nil="true"/><view><gallery>false</gallery></view><description i:nil="true"/><chomikId>00000</chomikId></a:folder>

A o to wynik jaki uzyskuje

array(2) {
  [0]=>
  array(1) {
    [0]=>
    array(3) {
      ["id"]=>
      object(SimpleXMLElement)#5 (1) {
        [0]=>
        string(1) "5"
      }
      ["name"]=>
      object(SimpleXMLElement)#6 (1) {
        [0]=>
        string(9) "Katalog_1"
      }
      [0]=>
      array(1) {
        [0]=>
        array(2) {
          ["id"]=>
          object(SimpleXMLElement)#10 (1) {
            [0]=>
            string(1) "7"
          }
          ["name"]=>
          object(SimpleXMLElement)#11 (1) {
            [0]=>
            string(12) "SubKatalog_1"
          }
        }
      }
    }
  }
  [1]=>
  array(1) {
    [0]=>
    array(3) {
      ["id"]=>
      object(SimpleXMLElement)#3 (1) {
        [0]=>
        string(1) "6"
      }
      ["name"]=>
      object(SimpleXMLElement)#9 (1) {
        [0]=>
        string(9) "Katalog_2"
      }
      [0]=>
      array(0) {
      }
    }
  }
}

Działa mi to ale do jednego pod folderu a gdy jest ich już więcej to lipa.
I stanąłem na tym i nie mogę nic wymyślić..
Dziękuję za pomoc.

0

słowo klucz - rekurencja. przykład zagłębiania się w strukturę katalogów to najlepszy przykład dla użycia rekurencji - doucz się i zrobisz bez problemu ;)

0

Chciałem na sile uniknąć używania rekurencji, w php to strasznie obciąża serwer.
Ma ktos z szanownych kolegów jakiś inny pomysł.

0

Chciałem na sile uniknąć używania rekurencji, w php to strasznie obciąża serwer.

Jak nie umiesz napisać i wpadniesz w nieskończoną pętlę to pewnie tak :D
Jakieś źródła takich bredni?

0

Nie pamietam źródła, to była chyba jakaś książka ale nie pamietam tytułu.
Idąc tokiem działania owej funkcji, parser każdorazowo zapamiętuje w pamięci dane do obrobienia i czym wiecej w głąb tym wiecej używamy pamięci.
Innaczej nie miało by to prawa działać, jeśli się mylę proszę mnie poprawić.
Jak wspomniałem źródła nie pamietam ale nawet w wiki jest o tym mowa.
Przy paru stringach to nie problem ale przy kilku set lub wiecej ?
Jak na razie przerabiam to na funkcje, jak bym miał problem to się odezwę.

0

Idąc tokiem działania owej funkcji, parser każdorazowo zapamiętuje w pamięci dane do obrobienia i czym wiecej w głąb tym wiecej używamy pamięci.

Ale iteracyjnie robisz w zasadzie to samo. Też lecisz po danych, zbierając z tego istotne informacje. W dodatku wiedz, że jeżeli przekazujesz jakiś parametr - nie zużywa on dodatkowej pamięci - używa odniesienia do poprzedniego miejsca w pamięci - oczywiście dopóki tej zmiennej nie zmodyfikujesz, wtedy dopiero tworzy się kopia zmiennej, która jest modyfikowana.

0

Ok poradziłem sobie, drobny błąd a człowiek chodzi po omacku.
Jak na razie, zostawiam na rekurencji.
Kiedyś chętniej tu programiści pomagali teraz widzę została tylko teza, wstukaj w Google, poucz się itp., a forum ktoś stworzył z inną myślą szkoda że tak wielu u serów o tym zapomniało.

Chętniej pomogą ci na angielsko języcznej stronie niż na polskiej.
Pytam co z wami rodacy ?

Pozdrawiam.

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