Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Prosta sprawa ... xml -> php
Forum PHP.pl > Forum > XML, AJAX > XML
orson
witam ..

mam taki problem ...
[xml:1:a1f1b1f14d]
<?xml version="1.0"?>
<menu>
<level-0 name='Home' title='Back to home page' id='0' class='linkHome'></level-0>
<level-0 name='Offer' title='Chceck out our offer' url='?mode=offer&action=catalog'>
<level-1 name='Rules' title='Our Rules' id='2'></level-1>
</level-0>
<level-0 name='Account' title='Account Options' url='?mode=user&action=main'></level-0>
<level-1 name='Log In' title='Log in to store' url='?mode=user&action=login'></level-1>
<level-1 name='Log Off' title='Log Off when You done' url='?mode=user&action=logoff'></level-1>
<level-1 name='Create' title='Create account' url='?mode=user&action=create'></level-1>
<level-1 name='Activate' title='Activate Your Account' url='?mode=user&action=activ'></level-1>
<level-1 name='Veriffy' title='Veriffy Acount to gain HUGE discount' url='?mode=user&action=ver'></level-1>
<leve-2 name='Phone' title='Veriffy by phone' url='?mode=user&action=ver&id=1'></level-2>
<leve-2 name='Mail' title='Veriffy by regular mail' url='mode?user&action=ver&id=2'></level->
</level-0>
</menu>
[/xml:1:a1f1b1f14d]
i teraz chce z tego otrzymac taka tabice:
[php:1:a1f1b1f14d]<?php
$nazwa[0][0]['name'] = 'Home';
$nazwa[0][0]['title'] = 'Back to home page';
$nazwa[0][0]['id'] = 0;
$nazwa[0][0]['class'] = 'linkHome';
$nazwa[1][0]['name'] = 'Offer';
$nazwa[1][0]['title'] = 'Chceck out our offer';
$nazwa[1][0]['url'] = '?mode=offer&action=catalog';
$nazwa[2][1]['name'] = 'Rules';
$nazwa[2][1]['title'] = 'Our Rules';
$nazwa[2][1]['id'] = 2;
?>[/php:1:a1f1b1f14d]
czyli:
[php:1:a1f1b1f14d]<?php
$nazwa[id][level][wlasciwosc] = 'wartosc';
?>[/php:1:a1f1b1f14d]
czytalem manual i probowalem dostosowac funkcje z przykladu ale nie dalem rady, poza tym tam sa same skomplikowane funkcjce i przyklady a ja potrzebuje taka prosta funkcje ... zeby wywolana zwracala mi to do zmiennej taka tablice ... czy to sie da zrobic bez wielkiej ilosci kodu questionmark.gif

cya
Seth
Mam podobny problem winksmiley.jpg
http://php.pl/viewtopic.php?t=11122
hawk
Niestety, trochę się pogubiłem w strukturze tej tablicy sad.gif .

Ale z tego co znam SAX, żadnej automagicznej funkcji nie ma. Owszem, jest xml_parse_into_struct(), ale to generuje zupełnie inną tablicę. Więc bez odrobiny kodu się nie obejdzie.

To w końcu będzie może nie bardzo prosta funkcja, ale przynajmniej zestaw bardzo prostych funkcji. Więc IMHO nie pozostaje nic innego jak napisać parserek SAXowy.
orson
witam ...

SAX ?
jaki rodzaj tablicy generuje parse_struct ? moze da sie przerobic moja tak zeby bylo chociaz zblizone ?

cya
hawk
Cytat
SAX ?
jaki rodzaj tablicy generuje parse_struct ? moze da sie przerobic moja tak zeby bylo chociaz zblizone ?


Hmm, wychodzi w tego taka dziwna tablica, a w sumie nawet 2 tablice. Do niczego raczej niepodobne. Nie wiem jak to opisać, musisz sprawdzić w manualu (Xml parser functions).

Ja nigdy nie używałem xml_parse_into_struct, zawsze wolałem napisać sobie parser, bo to co ta funkcja generuje, to mi się średnio podoba.
orson
witam ...

to w takim razie co robi taki parser ? wiem ze parsuje ale w jaki sposob ? czy pracuje na pliku czy bezposrednio na danych ?

bawie sie wlasnie parse_struct i moze cos z tego wyjdzie ...

cya
MaKARON
Proponuję panom path_parser - łatwo znajdziecie w sieci, a nie mam pod ręką skryptów. Podjecie wyrażenie XPath (prooooościutko dla w/w przykładu) i funkcję, która ma taką ścieżkę obsługiwać... a tam sobie odpowiednio przypisujesz - nie będziecie mieli problemów, gdyby jednak to piszcie...

[php:1:2cc81eb5e2]<?php
function plik($nazwa,$attr,$content)
{
global $pliki;
$attr['temat'] = strip_tags($content);
$pliki[] = $attr;
}

/*******************************************/
/** najpierw musimy wyciagnac nazwy plikow */
function ktorePliki()
{
$reader = new Path_parser();
$reader->set_handler('/aktualne/news','plik');

if (!$reader->parse_file(XML_PATH."xml/aktualne.xml"))
exit($reader->get_error());
}

?>[/php:1:2cc81eb5e2]
hawk
Cytat
to w takim razie co robi taki parser ? wiem ze parsuje ale w jaki sposob ? czy pracuje na pliku czy bezposrednio na danych ?


Jeżeli dobrze rozumiem, chodzi o parser SAX? Hmm, piszesz własne funkcje, które parser wywoła gdy znajdzie odpowiednie elementy. Np. masz funkcję startElement, endElement, itd. Za każdym razem jak parser znajdzie np. tag początkowy, odpali odpowiednią funkcję, przekaże odpowiednie argumenty, itd. A ty w tej funkcji musisz po kawałku budować sobie jakąś strukturę - tablicę w php czy co chcesz.
MaKARON
samo parsowanie SAX jest zbyt ogolne - proponuje moje rozwiazanie, latwiejsze i szybsze w oprogramowaniu... smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.