[PHP/XML] pobieranie danych z pliku

Odpowiedz Nowy wątek
2006-09-14 18:17
0

Witam.

Nie pracowałem jeszcze nigdy z plikami xml, a problem mam, więc chciałbym się poradzić bardziej doświadczonych kolegów :)

Otóż mam plik xml o takiej strukturze:

<forex>
 <item name="..." date="..." time="..." bid="..." ask="..." change="..." min="..." max="..."/>
 <item .... />
 <item .... />
 (...)
</forex>

Chciałbym teraz pobrać z tego pliku kilka "itemów", a z nich np. datę i czas. Próbowałem pomagać sobie manualem php (http://pl2.php.net/manual/pl/ref.xml.php), ale nie za bardzo mi to wychodzi.

Byłbym wdzięczny za pomoc :)

Pozdrawiam,
Greenek


Pozostało 580 znaków

2006-09-16 12:19
__robin101__
0

Skorzystaj z SimpleXml, jest bardzo proste.

http://pl2.php.net/manual/pl/ref.simplexml.php

Pozostało 580 znaków

2006-09-16 23:22
0

Postanowiłem skorzystać z SimpleXML, lecz natrafiłem na kolejny problem. Jako, że serwer ma wyłączoną możliwość korzystania ze zdalnych plików musiałem pobrać plik do stringa i dopiero później go parsować. Wygląda to mniej więcej tak:

$xmlfile = fsockopen('adres/xml.php');
$xmlstr = stream_get_contents($xmlfile);
$xml = simplexml_load_string($xmlstr);

Znalazłem też funkcję simplexml2array, która pobrany xml zwraca w postaci tablicy. Póki plik xml jest na moim serwerze wszystko jest ok, ale gdy próbuję pobierać plik z innego serwera (za pomocą tych linijek powyżej) tablica jest pusta. Co z tym kodem jest nie tak?


Pozostało 580 znaków

2006-09-17 00:16
0

$xmlfile = fsockopen('adres/xml.php');

jeżeli to nie jest skrót myślowy to to na pewno nie przejdzie, to jest połączenie się z hostem adres/xml.php - raczej takiego nie ma

łączysz się z "adres", drugi parametr podajesz port 80, wysyłasz potem nagłówki (GET itp), pustą linię i dopiero dajesz stream_get_contents (jeszcze wynik trza oczyścić z nagłówków - usunięcie wszystkiego do pierwszej pustej linii)


Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

2006-09-17 00:49
0

male pytanko, do ktorego (jeszcze) nie ma sensu robic nowego watku (jeszze nie zaczalem roboty ;))

czy to simplexmp bedzie dobre dla duzego pliku xml? co bedzie dobre?

wielkosc pliku to jakies 150mb, po spakowaniu ze 3


Pozostało 580 znaków

2006-09-17 01:35
0

Nie wiem, jak działa akurat SimpleXML, ale obawiam się, że może próbować ładować cały plik do pamięci. Zdecydowana większość serwerów nie pozwala na tak dużą ilość pamięci zajmowanej przez jeden skrypt (aczkolwiek u siebie na localu przykładowo może się udać, wystarczy odpowiednio ustawić php.ini).


Grunt to uziemienie...

Pozostało 580 znaków

2006-09-18 17:01
0
Greenek napisał(a)

Witam.

Nie pracowałem jeszcze nigdy z plikami xml, a problem mam, więc chciałbym się poradzić bardziej doświadczonych kolegów :)

Otóż mam plik xml o takiej strukturze:

<forex>
<item name="..." date="..." time="..." bid="..." ask="..." change="..." min="..." max="..."/>
<item .... />
<item .... />
(...)
</forex>

Chciałbym teraz pobrać z tego pliku kilka "itemów", a z nich np. datę i czas. Próbowałem pomagać sobie manualem php (http://pl2.php.net/manual/pl/ref.xml.php), ale nie za bardzo mi to wychodzi.

Byłbym wdzięczny za pomoc :)

Pozdrawiam,
Greenek

Może funkcją explode(); jezeli chodzi o bezposrednie pobrania danych?

Pozostało 580 znaków

2006-09-18 20:19
0

No, powodzenia ;)

Znalazłem już fajną funkcję, która zwraca mi xml do tablicy. Wszystko działa.


Pozostało 580 znaków

2006-09-19 17:20
0

BTW: a jaka to funkcja? :) Może podaj, może się komuś kiedyś przyda


homepage
<font size="1">Jeśli starasz się, by Twój system był idiotoodporny, zawsze znajdzie się idiota, który jest bardziej pomysłowy od Ciebie.</span>

Pozostało 580 znaków

2006-09-19 20:16
0

@Greenek:
Ale taką "funkcję" daje SimpleXML. Oraz parę innych rzeczy do tego. Rzecz w tym, że problemy mogą się pojawić przy dużych plikach, takich, o jakich pisał Tomkiewicz. W takim przypadku jak coś Ci przetwarza cały plik wrzucając go do tablicy, to na 100% nie uda Ci się to na takim pliku.


Grunt to uziemienie...

Pozostało 580 znaków

2006-09-20 18:13
0

Niby daje, ale z moim plikiem sam SimpleXML miał jakieś humory. Z tą funkcją wszystko działa bez problemu.

function simplexml2array($xml) {
   if (get_class($xml) == 'SimpleXMLElement') {
       $attributes = $xml->attributes();
       foreach($attributes as $k=>$v) {
           if ($v) $a[$k] = (string) $v;
       }
       $x = $xml;
       $xml = get_object_vars($xml);
   }
   if (is_array($xml)) {
       if (count($xml) == 0) return (string) $x; // for CDATA
       foreach($xml as $key=>$value) {
           $r[$key] = simplexml2array($value);
       }
       if (isset($a)) $r['@'] = $a;    // Attributes
       return $r;
   }
   return (string) $xml;
}

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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