Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [XML] opis modulow za pomoca xml [mocno newbie]
Yacho
post
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]
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Dawid Pytel
post
Post #2





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ć.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.12.2025 - 01:46