Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [xml] XML reader jak odczytac atrybuty
Forum PHP.pl > Forum > XML, AJAX
jot
Moze i bylo przerabiane ale nie moge nigdzie znalezc porady

mam taki xml:

Kod
<dane>
    <dodaj>
        <imie>Krzysztof</imie>
        <nazwisko>Smolik</nazwisko>
        <plec>M</plec>
        <adresy>
            <adres rodzaj="zamieszkania" ulica="Forteczna 28/36" miasto="Poznań">
            <adres rodzaj="zameldowania" ulica="Broniewskiego 128/136" miasto="Poznań">
        <adresy>
    </dodaj>
</dane>


i taki skrypcik wyciaga mi czesc tego co potrzebuje:

Kod
$reader = new XMLReader();
$reader->open('1.xml');
while($reader->read()) {
        
              if($reader->nodeType == XMLReader::ELEMENT) {
        $name = $reader->name;
    }

               if($reader->nodeType == XMLReader::TEXT ||
       $reader->nodeType == XMLReader::CDATA)
    {
        switch($name) {
            case 'imie';
                echo '<b>'.$reader->value.'</b> ';
                break;
            case 'nazwisko':
                echo $reader->value.'<br />';
                break;
            case 'plec':
                echo $reader->value.'<br />';
                break;
        }

    }
}


Skrypcik poprawnie wyciaga mi imie nazwisko i plec, niestety nie wiem jak sie dobrac do elementow adresu - moze jakas dobra dusza pomoze?
erix
A wystarczy nieco poszukać... ;]

http://forum.php.pl/index.php?s=&showt...st&p=496368
jot
ale sytuacja jest nieco inna bo ja musze zczytac jeszcze atrybuty.

czy ktos bylby laskaw dopisac takie cos do mojego kodu albo wskazac dokladnie link gdzie jest takie pomieszanie.
erix
A jak jest atrybut po angielsku?

Nie bez powodu zalinkowałem do konkretnego posta; chyba możesz się nieco wysilić i przeanalizować ten listing, nie?
jot
atrybut po angielsku to attribute a nie element
ja tam nie widze zadnego slowa attribute

pozatym to wyciagania atrybutow potrzebne jest chyba XMLReader::getAttribute tez nie widze tam takiej skladni.

Nie chce sie przekomazac, poprostu potrzebuje pomocy, ktorej jak narazie nie dostalem. Albo jestem za glupi i nie potrafie zastosowac powyzszego przykladu u siebie albo przyklad nie jest do konca adekwatny.

pozdrawiam
erix
  1. <?php
  2. while($xml->moveToNextAttribute()) $el['attributes'][$xml->name] = $xml->value;
  3. ?>

Ta linia jest wiążąca.
jot
ok zrobilem to tak:

Kod
if ($reader->hasAttributes and $reader->nodeType == XMLReader::ELEMENT) {
     while ($reader->moveToNextAttribute()) {
         if  ($reader->name=="ulica")    {
             echo $reader->value."<br>";
                 }
                 }


i wyrzuca wszystko okej ale mam problem z zapisaniem tego do tablicy gdyz dziala mi to w jakis dziwny sposob. Dla przykladu:

Kod
$n=0;
if ($reader->hasAttributes and $reader->nodeType == XMLReader::ELEMENT) {
     while ($reader->moveToNextAttribute()) {
         if  ($reader->name=="ulica")    {
             echo $n."<br>";
                 }
                $n++;
                 }


Nie wyswietla mi to spodziewanego 0 <br> 1 tylko 0 <br>0 tak jakby inkrementacja nie miala miejsca. Mozna to jakos poprawic?
erix
Wyrzuć $n poziom wyżej.
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.