Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> 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


--------------------
www.wettradar.com
Go to the top of the page
+Quote Post
skowron-line
post
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


xpath jeżeli się nie mylę.


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
grush
post
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 21.06.2007

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


a moze Xpath w simpleXML:

  1.  
  2. <dwml>
  3. <data>
  4. <location>
  5. <location-key>point1</location-key>
  6. <point latitude="37.39" longitude="-122.07"></point>
  7. </location>
  8. </data>
  9. .....
  10. </dwml>
  11.  
  12. XPATH Query to take the latitude in more general way
  13. /dwml/data/location/point/@latitude
  14.  
  15. Where as with simple XML it is just a familiar PHP statement,
  16. $simplexml->data->location->point->attributes()->latitude
  17.  
  18. Anyway still you can use the xpath inside your simplexml code. You can execute xpath queries by calling xpath function from any SimpleXMLEelment. It will return an array of SimpleXMLElement that match your query. So for the above example your XPath query would be something like this,
  19. $simplexml= new SimpleXMLElement($xml);
  20. $lats = $simplexml->xpath('/dwml/data/location/point/@latitude');
  21. echo $lats[0];
  22.  
Go to the top of the page
+Quote Post
thek
post
Post #4





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




Także polecam Xpath. Sam używam i jest to nieraz o wiele wygodniejsze w użyciu. Jedynie zapytania w bazie są moim zdaniem wygodniejsze smile.gif


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
erix
post
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
jest jakieś szybsze (wydajniejsze) dotarcie do samej kategorii np:Cricket

No skoro jest to tylko fragment, to skorzystaj z XMLReader.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
skowron-line
post
Post #6





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


Cytat(grush @ 27.08.2009, 10:05:29 ) *
a moze Xpath w simpleXML:

Obawiam się że chyba nie. Ja wybrałem domxml ze wezględu na podobieństwo nazwa do JS ( może głupie no ale )


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
grzegorz_g
post
Post #7





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

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


zainteresowałem się xpath

  1.  
  2. $filename = "plik_z_xml.xml";
  3. $doc = new DOMDocument;
  4. $doc->load($filename);
  5. $xpath = new DOMXPath($doc);
  6.  
  7. $query = 'OO/Sport[. = "Soccer"]';
  8. $entries = $xpath->query($query);
  9.  
  10. foreach ($entries as $elements) {
  11.  
  12. print $elements->nodeValue;
  13.  
  14. }
  15.  


i wszystko pięknie wyrzuca mi elementy "Soccer", tyko teraz nie wiem jak pobrać te inne elementy Tournament, HomeTeam,AwayTeam z tego samego węzła. Chce po prostu by wyświetliło mi HomeTeam z węzła gdzie <Sport> ="Soccer"



--------------------
www.wettradar.com
Go to the top of the page
+Quote Post
thek
post
Post #8





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" 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 smile.gif

EDIT: Tyle, że jest jeszcze inna składnia i właśnie ją znalazłem 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 smile.gif Czyli idąc do HomeTeam musisz ten węzeł dorzucić ZA szukaniem kategorii 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


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
grzegorz_g
post
Post #9





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

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


ale przy mojej strukturze xml'a
ma to zastosowanie? bo jako tako nie mam atrybutów (chyba)

potrzebuje wyciągnąć węzły w których <sport> jest równy "Soccer" i mieć możliwość łatwego dostępu do tych danych


--------------------
www.wettradar.com
Go to the top of the page
+Quote Post
thek
post
Post #10





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




Edytowałem kod więc zerknij teraz smile.gif Zasugerowałem się słownictwem w ostatnim poście nie spojrzawszy na XML. Ale poprawilem to już do Twojej wersji:
  1. $query = 'OO/Sport[. = "Soccer"]/OddsData/HomeTeam';
To Ci wyciągnie HomeTeam z Twojego XML smile.gif


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
grzegorz_g
post
Post #11





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

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


kod mam teraz tej postaci:
  1.  
  2. $filename = "plik_z_xml.xml";
  3. $doc = new DOMDocument;
  4. $doc->load($filename);
  5. $xpath = new DOMXPath($doc);
  6.  
  7.  
  8. $query = 'OO/Sport[. = "Soccer"]/OddsData/HomeTeam';
  9.  
  10.  
  11. $entries = $xpath->query($query);
  12.  
  13.  
  14. foreach ($entries as $elements) {
  15. print $elements->nodeValue;
  16. }
  17.  


nie ma bledu ale nic tez nie pokazuje sad.gif


--------------------
www.wettradar.com
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 08:51