![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 148 Pomógł: 0 Dołączył: 16.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
no wiec tak:
planuje zbudowac CMSik i slyszalem ze do budowy modulow fajnbie i optymalnie jest wykorzystac XML - jako ze o XML pojecia nie mam wygoglalem kurs i zaczalem czytac - ogolnie XML wyglada mi na takki html w ktorym mozna wlasne znaczniki definowac (wiem ze to nieporecyzyjne okreslenie ale tak mi wyglada to (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif) ) no wiec zalozmy ze mam kod : [xml:1:612d83a95b] <modul> <name> Jakismodul </name> <header> header modulu </header> <main> glowna czesc modulu </main> </modul> [/xml:1:612d83a95b] taki sposob organizacji danytch mi sie podoba - fajnie bo moge sobie tagi dostosowac do swoich potrzeb... Tylko teraz pytanie - jak "wyciagnac" te dane za pomoca php z xmla ? przeciez nie bede otwieral pliku jako textowego i wyciagal linijka po linijce - nie kumam zbyt jak w ten sposob zapysane dane mozna wykorzystac "wklejajac" w odpowiednie miejsca... moglby ktos objasnic ? [/xml] |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
Wyciągasz generalnie stosując parser XML.
Do wyboru masz 2 metodologie: SAX i DOM. SAX przetwarza plik XML w oparciu o zdarzenia (np. "znalazłem taga <modul>", znalazłem koniec taga </modul>" itd). DOM natomiast tworzy w pamięci całą strukturę drzewiastą odpowiadającą plikowi XML. W skrócie: używaj modelu SAX gdy chcesz tylko odczytać plik, DOM gdy zamierzasz go zmieniać z poziomu skryptu. Biblioteki (parsery) SAX i DOM są dostępne w php. Szukaj w manualu pod hasłem XML (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Z tego co wiem, SAX jest bardziej dostępny. Oba parsery są jako rozszerzenia, ale gdzieś czytałem że php na Apache zawsze ma włączony SAX, a DOM niekoniecznie. Ale głowy za to nie dam (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) . Jeszcze są dostępne parsery XML napisane w całośći w php, bez żadnych bibliotek. Np. ezXML (parser DOM), PEAR XML_HtmlSAX. I na koniec: parsowanie XML jest wolne. Robienie tego za każdym wywołaniem boli. Dlatego lepiej sparsować sobie plik i wygenerować plik z jakimś odpowiadającym mu kodem, czyli "skompilować". I potem korzystać z tego, dopóki nie zmienisz XML - wtedy znowu automatycznie kompilować. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 148 Pomógł: 0 Dołączył: 16.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
no dobra... kwestia 1 rzeczy - jak bedzie wygladac przeparsowany xml ? on bedzie wciagniety w zmienne czy jak ? z czym to gryzc gdzie szukac przykladow zastosowan xml+php ?
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 133 Pomógł: 0 Dołączył: 15.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Witam
To ja może podam bardzo unwersalny kod php który pobiera dane z XMLa. Można go użyć chyba do każdego dokumentu XMLa (ja nim pobieram waluty z NBP). [php:1:8a3b245a23]<?php function fetch_xml($xml){ if(!($fp = fopen($xml, "r"))){ die("IO Error $xml_file"); } while($chunk = fread($fp,4096)){ $xml_data .= $chunk; } $parser = xml_parser_create(); xml_parse_into_struct($parser, $xml_data, &$assoc_arr, &$idx_arr); xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1); $root_tag = $assoc_arr[$root_level]['tag']; $base_level = $root_level+1; $base_tag = strtolower($assoc_arr[$base_level]['tag']); $i = 0; $prefix = ""; foreach($assoc_arr as $element){ if($element['tag'] != $root_tag){ if(!preg_match('/^s+$/', $element['value'])){ $tag = strtolower($element['tag']); if($element['type'] == 'open' && $element['level'] > ($base_level+1)){ // Add Prefix's for new Tags Under Base $tag_prefix[$element['level']] = $tag; } elseif($element['type'] == 'close' && $element['level'] > ($base_level+1)){ // Remove Prefix's when tags closed $tag_prefix[$element['level']] = ""; } elseif($element['type'] == 'complete') { // Generate Prefix if(count($tag_prefix) > 0){ $str_prefix = ""; foreach($tag_prefix as $prefix){ if(!empty($prefix)) $str_prefix .= $prefix."_"; } } // End Prefix // Add Our Data to the Items Array $extra = ""; while(isset($items[$i][$str_prefix.$tag.$extra])){ if(empty($extra)) $extra = 1; $extra++; } $items[$i][$str_prefix.$tag.$extra] = $element['value']; } } if($tag == $base_tag){ // Add Our Atttributes if(isset($element['attributes']) && $element['type'] == 'open'){ $items[$i] = $element['attributes']; } // Start New Record if($element['type'] == 'close'){ $i++; } } } } return $items; } ?>[/php:1:8a3b245a23] Teraz wystarczy, że wywołasz funkcję w parametrze podając link do pliku xml. Funkcja zwróci Ci tablicę $items. Możesz zobaczyć na jakiej zasadzie jest zbudowana: [php:1:8a3b245a23]<?php echo "<pre>"; print_r($items); echo "</pre>"; ?>[/php:1:8a3b245a23] To jest jeden z przykładów pobierania danych z xmla. Oczywiście większość programistów pisze specjalne parsery pobierające dane tylko z konkretnego pliku xml. Jednak to na początek pwoinno wystarczyć. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 22:11 |