Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [XML][PHP] Problem z pobranie atrybutu tagu XML
shinuexx
post 2.03.2011, 20:17:00
Post #1





Grupa: Zarejestrowani
Postów: 78
Pomógł: 9
Dołączył: 2.02.2011
Skąd: undefined

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


Witam
Mam taki problem z przetworzeniem za pomocą DOM w php takiego XML:
  1. <?xml version='1.0' encoding='UTF-8'?>
  2. <entry xmlns='http://www.w3.org/2005/Atom' xmlns:media='http://search.yahoo.com/mrss/' xmlns:gd='http://schemas.google.com/g/2005' xmlns:yt='http://gdata.youtube.com/schemas/2007'>
  3. <id>http://gdata.youtube.com/feeds/api/videos/QtB_i-uDxLI</id>
  4. <published>2009-06-18T13:14:07.000Z</published>
  5. <updated>2011-02-27T22:24:06.000Z</updated>
  6. <category scheme='http://schemas.google.com/g/2005#kind' term='http://gdata.youtube.com/schemas/2007#video'/>
  7. <category scheme='http://gdata.youtube.com/schemas/2007/categories.cat' term='People' label='Ludzie i blogi'/>
  8. <category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='Не зарекайся'/>
  9. <title type='text'>БАНД`ЭРОС "Не зарекайся"</title>
  10. <content type='text'/>
  11. <link rel='alternate' type='text/html' href='http://www.youtube.com/watch?v=QtB_i-uDxLI&amp;feature=youtube_gdata'/>
  12. <link rel='http://gdata.youtube.com/schemas/2007#video.responses' type='application/atom+xml' href='http://gdata.youtube.com/feeds/api/videos/QtB_i-uDxLI/responses'/>
  13. <link rel='http://gdata.youtube.com/schemas/2007#video.related' type='application/atom+xml' href='http://gdata.youtube.com/feeds/api/videos/QtB_i-uDxLI/related'/>
  14. <link rel='self' type='application/atom+xml' href='http://gdata.youtube.com/feeds/api/videos/QtB_i-uDxLI'/>
  15. <author>
  16. <name>BanderosOfficial</name>
  17. <uri>http://gdata.youtube.com/feeds/api/users/banderosofficial</uri>
  18. </author>
  19. <gd:comments>
  20. <gd:feedLink href='http://gdata.youtube.com/feeds/api/videos/QtB_i-uDxLI/comments' countHint='7'/>
  21. </gd:comments>
  22. <media:group>
  23. <media:category label='Ludzie i blogi' scheme='http://gdata.youtube.com/schemas/2007/categories.cat'>People</media:category>
  24. <media:content url='http://www.youtube.com/v/QtB_i-uDxLI?f=videos&amp;app=youtube_gdata' type='application/x-shockwave-flash' medium='video' isDefault='true' expression='full' duration='233' yt:format='5'/>
  25. <media:content url='rtsp://v5.cache4.c.youtube.com/CiILENy73wIaGQmyxIPri3_QQhMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp' type='video/3gpp' medium='video' expression='full' duration='233' yt:format='1'/>
  26. <media:content url='rtsp://v8.cache4.c.youtube.com/CiILENy73wIaGQmyxIPri3_QQhMYESARFEgGUgZ2aWRlb3MM/0/0/0/video.3gp' type='video/3gpp' medium='video' expression='full' duration='233' yt:format='6'/>
  27. <media:description type='plain'/>
  28. <media:keywords>Не зарекайся</media:keywords>
  29. <media:player url='http://www.youtube.com/watch?v=QtB_i-uDxLI&amp;feature=youtube_gdata_player'/>
  30. <media:thumbnail url='http://i.ytimg.com/vi/QtB_i-uDxLI/0.jpg' height='240' width='320' time='00:01:56.500'/>
  31. <media:thumbnail url='http://i.ytimg.com/vi/QtB_i-uDxLI/1.jpg' height='90' width='120' time='00:00:58.250'/>
  32. <media:thumbnail url='http://i.ytimg.com/vi/QtB_i-uDxLI/2.jpg' height='90' width='120' time='00:01:56.500'/>
  33. <media:thumbnail url='http://i.ytimg.com/vi/QtB_i-uDxLI/3.jpg' height='90' width='120' time='00:02:54.750'/>
  34. <media:title type='plain'>БАНД`ЭРОС "Не зарекайся"</media:title>
  35. <yt:duration seconds='233'/>
  36. </media:group>
  37. <gd:rating average='4.9633026' max='5' min='1' numRaters='109' rel='http://schemas.google.com/g/2005#overall'/>
  38. <yt:statistics favoriteCount='130' viewCount='41513'/>
  39. </entry>

Jest to XML z danymi z youtube'a. Znajduje się tam tag:
  1. <yt:duration seconds='233'/>

i nie mogę sobie poradzić z wyświetleniem wartości atrybutu seconds.

Próbowałem takiego kodu:
  1. $info = new DOMDocument();
  2. $info->load("http://gdata.youtube.com/feeds/api/videos/".$movie);
  3. $timesec=$info->getElementsByTagNameNS('yt','duration')->item(0)->getAttribute('second');

a także bez item(0) ale i to nie działa. Na necie nie znalazłem rozwiązania swojego problemu bo znalezione przeze mnie nie działa.
Proszę o pomoc.
Go to the top of the page
+Quote Post
wookieb
post 2.03.2011, 20:23:04
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




  1. $info = new DOMDocument();
  2. $info->load("http://gdata.youtube.com/feeds/api/videos/".$movie);
  3. $timesec=$info->getElementsByTagNameNS('http://gdata.youtube.com/schemas/2007','duration')->item(0)->getAttribute('seconds');


Plus dla Ciebie za podanie wszystkich kompletnych danych! smile.gif


--------------------
Go to the top of the page
+Quote Post
shinuexx
post 6.03.2011, 18:24:35
Post #3





Grupa: Zarejestrowani
Postów: 78
Pomógł: 9
Dołączył: 2.02.2011
Skąd: undefined

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


Dzięki wielkie za pomoc wink.gif

Sorki że jeszcze raz pytam, ale wszystko ładnie działało u mnie na kompie a jak wrzuciłem na serwer zdalny to się wysypało tzn.
Kod
Fatal error: Call to a member function getAttribute() on a non-object in /home/eaiiegrp/shinuexx/public_html/homepage/inc/function.lib.php on line 348

i właśnie w tym samym miejscu to jest.
  1. $timesec=$info->getElementsByTagNameNS('http://gdata.youtube.com/schemas/2007','duration')->item(0)->getAttribute('seconds');

czemu może mi wywalać ten błąd i jak go ewentualnie mogę naprawić?
Czy może to wynikać z wcześniejszej wersji PHP questionmark.gif Domyślam się że wtedy mogła by być wcześniejsza wersja DOM. Tylko byłby to problem bo do ustawień PHP na zdalnym nie mam dostępu.

Ten post edytował shinuexx 6.03.2011, 18:27:21
Go to the top of the page
+Quote Post
wookieb
post 6.03.2011, 18:49:58
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




A upewnij się, że DOMDocument dostaje na pewno poprawnego xml-a (z poprawnymi danymi)


--------------------
Go to the top of the page
+Quote Post
shinuexx
post 6.03.2011, 20:36:03
Post #5





Grupa: Zarejestrowani
Postów: 78
Pomógł: 9
Dołączył: 2.02.2011
Skąd: undefined

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


Dostaje poprawne dane bo na moim kompie działa. Dodatkowo wcześniej pobieram inne dane i błąd nie występuje.
Go to the top of the page
+Quote Post
everth
post 6.03.2011, 21:02:37
Post #6





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

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


Pytanie - czy takie coś również nie działa?
  1. $info = new DOMDocument();
  2. $info->load("http://gdata.youtube.com/feeds/api/videos/".$movie);
  3. $xpath = new DOMXPath($info);
  4. $timesec=$xpath->query("//yt:duration")->item(0)->getAttribute('second');


EDIT:
Jeszcze jedno - z manuala PHP
Cytat
In older versions of PHP5 this function might cause error messages when dealing with namespaces. I had problems with PHP 5.2.14 which comes with libXML V2.6.16. After switching to PHP 5.3.5 with libXML V2.7.7 I no longer had problems. Took me only about 30 hrs to figure that one out.

Inna metoda DOM ale coś mi mówi że ten sam problem może występować w innych funkcjach DOM poruszających w kontekście NS i to w dodatku bez wyrzucania błędu. Tylko podejrzenie, możliwe że błądzę.

Ten post edytował everth 6.03.2011, 21:12:18


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
shinuexx
post 6.03.2011, 23:01:36
Post #7





Grupa: Zarejestrowani
Postów: 78
Pomógł: 9
Dołączył: 2.02.2011
Skąd: undefined

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


lokalny czyta zdalny się sypie
Kod
Fatal error: Call to a member function item() on a non-object in /home/eaiiegrp/shinuexx/public_html/homepage/inc/function.lib.php on line 349

niedługo stwierdzę że prędzej będzie samemu wyciągnąć ten tag.
Go to the top of the page
+Quote Post
SATIO
post 26.03.2011, 00:44:00
Post #8





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 5.12.2010
Skąd: Gdańsk

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


Właśnie, właśnie, nie jest tak łatwo, klasa simplexml jest dobra jak wszystko gra i jest pod XML, ale potem okazuje się, że trochę bardziej złożona obsługa w DOMDocument pozwala na dostęp np do dokumentów HTML'a a dodatkowo czasem trzeba coś poprawić i wychodzi na to, że trzeba posklejać to z podstawowymi funkcjami PHP do odczytu danych, więc tak czy siak trzeba zrobić własną klasę....


--------------------
Sapletta.pl - Programista PHP, Gdańsk
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 Wersja Lo-Fi Aktualny czas: 22.06.2025 - 10:38