odczyt XML w PHP

0

Witam,
mam taki plik XML:
<SerwerSMS login="Moj_login">
<SMS id="1" numer="a1" wartosc="wartosc 1" stan="ok" godzina="2008-09-15 1818"/>
<SMS id="2" numer="a2" wartosc="wartosc 2" stan="bad" godzina="2008-09-15 1823"/>
</SerwerSMS>

i chciałbym to przypisać do pojedynczych zmiennych (tak żebym mógł uzupełniać zdania tymi zmiennymi).
Próbowałem zrobić coś takiego:

<?php
$pracownicy = simplexml_load_file('a.xml');
foreach ($pracownicy->SMS as $p) {
echo '<li>' . $p . '<ul>';
    foreach ($p->attributes() as $atr[]) {
       echo "$atr[0] - $atr[1] - $atr[2] - $atr[3] <br/>";
    }
    echo '</ul></li>';
}
?>

ale to nie chce działać...:/
zwraca mi:
a8e4e8f09a - - -
a8e4e8f09a - +12345678900 - -
a8e4e8f09a - +12345678900 - Test Serwera SMS -
a8e4e8f09a - +12345678900 - Test Serwera SMS - Doreczono
a8e4e8f09a - +12345678900 - Test Serwera SMS - Doreczono
a8e4e8f09a - +12345678900 - Test Serwera SMS - Doreczono
a8e4e8f09a - +12345678900 - Test Serwera SMS - Doreczono

co robię źle??

Northwest

0

foreach ($p->attributes()
Nie uważasz że $p nie jest klasą? Bo wywoływanie wyglądałoby tak:
$pracownicy->SMS->attributes(). Do tego polecam przerobić ten parser:

<?php

   function tag_start($parser, $attr, $params){ // 1
      echo 'Znaleziono nowy tag: '.$attr.' z parametrami ';
      print_r($params);
      echo '<br>';
   }
   
   function tag_end($parser, $attr){ // 2
      echo 'Koniec tagu '.$attr.'<br>';
   }

   $parser = xml_parser_create(); // 3
   
   xml_set_element_handler($parser, 'tag_start', 'tag_end'); // 4
   
   if(!($fp = fopen($_GET['file'], "r"))) { // 5
      die("Nie można otworzyć podanego pliku XML!!!");
   }

   while($data = fread($fp, 4096)) {
      if(!xml_parse($parser, $data, feof($fp))){ // 6
         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); // 7

?>

Ponieważ wszystko tu będzie z pewnością bardziej czytelne niż w twoim [kod].

0

hmmm... przerobiłem Twój kod na:

function tag_start($parser, $attr, $params){ // 1
foreach ($params as $atr[]) {
echo "$atr[0] - $atr[1] - $atr[2] - $atr[3] <br/>";
}

ale efekt znowu taki sam....:/ ten Twój kod zrzuca wszytko naraz, a ja chciałbym to przypisać do poszczególnych zmiennych...

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