Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Parser XML
Forum PHP.pl > Forum > XML, AJAX > XML
alien_zgc
Mam problem z wczytaniem czegoś takiego:



<?xml version="1.0" encoding="iso-8859-2"?>
<plik>

<lista_ofert>

<dzial tab="kategoria" typ="rodzaj">


<oferta>
<id>400</id>
<cena waluta="PLN">1234</cena>
<param nazwa="wojewodztwo" typ="text">Mazowieckie</param>
<param nazwa="miasto" typ="text">Warszawa</param>
<param nazwa="dzielnica" typ="text">Żoliborz</param>
<param nazwa="ulica" typ="text">Rudawska</param>

<param nazwa="opis" typ="text">
<linia>treść jakaśtam treść jakaśtam</linia>
<linia>treść jakaśtam treść jakaśtam</linia>
<linia>treść jakaśtam treść jakaśtam</linia>
<linia>treść jakaśtam treść jakaśtam</linia>
</param>

<param nazwa="email" typ="text">mail@mail.pl</param>
<param nazwa="zdjecie1" typ="text">1.jpg</param>
<param nazwa="zdjecie2" typ="text">2.jpg</param>
<param nazwa="zdjecie3" typ="text">3.jpg</param>
<param nazwa="zdjecie4" typ="text">4.jpg</param>
</oferta>


<oferta>
<id>143</id>
<cena waluta="PLN">1234</cena>
<param nazwa="wojewodztwo" typ="text">Mazowieckie</param>
<param nazwa="miasto" typ="text">Warszawa</param>
<param nazwa="dzielnica" typ="text">Żoliborz</param>
<param nazwa="ulica" typ="text">Rudawska</param>

<param nazwa="opis" typ="text">
<linia>treść jakaśtam treść jakaśtam</linia>
<linia>treść jakaśtam treść jakaśtam</linia>
</param>

<param nazwa="email" typ="text">mail@mail.pl</param>
<param nazwa="zdjecie1" typ="text">1.jpg</param>
<param nazwa="zdjecie2" typ="text">2.jpg</param>
<param nazwa="zdjecie3" typ="text">3.jpg</param>
<param nazwa="zdjecie4" typ="text">4.jpg</param>
<param nazwa="zdjecie5" typ="text">5.jpg</param>
<param nazwa="zdjecie6" typ="text">6.jpg</param>
</oferta>

</dział>

</lista_ofert>

</plik>









A oto skrypt, który napisałem, niestety potrafię odczytać tylko ID i CENA. Do reszty nie wiem jak się dobrać sad.gif
Bardzo dziękuję za pomoc we wczytaniu wojewodztwa i opisu z załączonego pliku XML






<?php

class oferta{
var $id;
var $nr;
var $cena;

var $wojewodztwo;
var $miasto;
var $dzielnica;
var $ulica;

var $opis;

function oferta($id){
$this -> id = $id;
}
}


$int = 0;
$oferty = array();
$czy_oferta = 0;


function tag_start($parser, $attr, $params){
global $act_tag, $int, $oferty, $czy_oferta;
if($attr == 'OFERTA' && $czy_oferta == 1){
die('Błąd: Niedozwolone zagnieżdżenie redaktorów! :]<br>');
}elseif($attr == 'OFERTA' && $czy_oferta == 0){
$oferty[$int] = new oferta($int);
$czy_oferta = 1;
}

if($czy_oferta == 1){
$act_tag = $attr;
}
}


function tag_text($parser, $text){
global $act_tag, $int, $oferty, $czy_oferta;
if($czy_oferta == 1){
switch($act_tag){
case 'ID': $oferty[$int] -> nr .= $text; break;
case 'CENA': $oferty[$int] -> cena .= $text; break;
// case 'LINE': $oferty[$int] -> opis .= $text; break;
}
}
}


function tag_end($parser, $attr){
global $act_tag, $int, $czy_oferta;
if($attr == 'OFERTA' && $czy_oferta == 1){
$int++;
$czy_oferta = 0;
}
}





$parser = xml_parser_create();
xml_set_element_handler($parser, 'tag_start', 'tag_end');
xml_set_character_data_handler($parser, 'tag_text');

if(!($fp = fopen('oferty.xml', 'r'))) {
die('Nie można otworzyć podanego pliku XML!!!');
}

while($data = fread($fp, 4096)) {
if(!xml_parse($parser, $data, feof($fp))){
die(sprintf("Błąd XML: %s w linii %d",
xml_error_string(xml_get_error_code($_parser)),
xml_get_current_line_number($parser)));
}
}
xml_parser_free($parser);





echo '<center>OFERTY</center><br>';
foreach($oferty as $oferta){
echo '<hr>
<b>Nr oferty</b>: '.$oferta -> nr.'<br>
<b>Cena</b>: '.$oferta -> cena.'<br>
<b>Wojewodztwo</b>: '.$oferta -> wojewodztwo.'</a><br>
<b>Opis</b>: '.$oferta -> opis.'</a><br>
';
}

?>
nospor
1) uzywaj bbcode
2) teraz to juz sie raczej korzysta z gotowych mechanizmow do obslugi XML takich jak DOM czy simpleXML
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.