Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> duży xml
grzegorz_g
post
Post #1





Grupa: Zarejestrowani
Postów: 259
Pomógł: 0
Dołączył: 26.10.2004

Ostrzeżenie: (0%)
-----


oto bardzo niewielki fragmanet xml'a, którego musze pobrac i zapisać do bazy.

  1.  
  2. - <Betradar>
  3. - <OO>
  4. <Sport>Baseball</Sport>
  5. <Category />
  6. <Tournament>MLB</Tournament>
  7. <Date>2009-08-27T19:05:00</Date>
  8. <AC>1</AC>
  9. <OddsType>2W</OddsType>
  10. - <OddsData>
  11. <HomeTeam>New York Yankees</HomeTeam>
  12. <AwayTeam>Texas Rangers</AwayTeam>
  13. <HomeOdds>1.40</HomeOdds>
  14. <AwayOdds>2.85</AwayOdds>
  15. </OddsData>
  16. </OO>
  17. - <OO>
  18. <Sport>Baseball</Sport>
  19. <Category />
  20. <Tournament>MLB</Tournament>
  21. <Date>2009-08-27T19:05:00</Date>
  22. <AC>1</AC>
  23. <OddsType>Total</OddsType>
  24. - <OddsData>
  25. <HomeTeam>New York Yankees</HomeTeam>
  26. <AwayTeam>Texas Rangers</AwayTeam>
  27. <Totalscore>9.50</Totalscore>
  28. <OverOdds>1.80</OverOdds>
  29. <UnderOdds>1.90</UnderOdds>
  30. </OddsData>
  31. </OO>
  32. - <OO>
  33. <Sport>Cricket</Sport>
  34. <Category />
  35. <Tournament>One Day Internationals</Tournament>
  36. <Date>2009-08-28T11:15:00</Date>
  37. <AC>1</AC>
  38. <OddsType>2W</OddsType>
  39. - <OddsData>
  40. <HomeTeam>Scotland</HomeTeam>
  41. <AwayTeam>Australia</AwayTeam>
  42. <HomeOdds>10.00</HomeOdds>
  43. <AwayOdds>1.02</AwayOdds>
  44. </OddsData>
  45. </OO>
  46. </Betradar>
  47.  


i teraz by zapisać dane z kategorii sport listuje to wszystko poprzez
  1. $xml = simplexml_load_string($plik_z_xml);
  2. foreach ($xml->OO as $channel ) {
  3.  
  4. if ($channel->Sport=="Cricket") {
  5. [zapis do bazy]
  6. }
  7.  
  8.  
  9. }
  10.  
  11.  


jest jakieś szybsze (wydajniejsze) dotarcie do samej kategorii np:Cricket
czekam na sugestie
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Aby odwołać się do atrybutów węzła musisz użyć "małpy" (IMG:style_emoticons/default/smile.gif)
Kod
nazwa_węzła/@nazwa_atrybutu

użycie
Kod
nazwa_węzła/@*
zwróci Ci wszystkie atrybuty tego węzła (IMG:style_emoticons/default/smile.gif)

EDIT: Tyle, że jest jeszcze inna składnia i właśnie ją znalazłem (IMG:style_emoticons/default/winksmiley.jpg)
Kod
nazwa_węzła/attribute::*
gdzie za * możesz wstawić nazwę atrybutu jeśli nie chcesz wszystkich.
Sorki... Nie spojrzałem na układ XML i zasugerowałem, że masz to już wewnątrz węzła jako atrybut, a nie kolejne elementy zagnieżdżone. Wtedy przepychasz się dalej w strukturze (IMG:style_emoticons/default/smile.gif) Czyli idąc do HomeTeam musisz ten węzeł dorzucić ZA szukaniem kategorii (IMG:style_emoticons/default/smile.gif)
A więc wejść do OddsData i tam do HomeTeam.
  1. $query = 'OO/Sport[. = "Soccer"]/OddsData/HomeTeam';

Dlatego XPath jest fajne bo działa jak przechodzenie po gałązkach. Robisz coś i szukasz pasujących do wzorca

Ten post edytował thek 28.08.2009, 11:30:15
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: 8.10.2025 - 17:59