Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [AJAX][XML] parsowanie pliku XML
TheaSiX
post
Post #1





Grupa: Zarejestrowani
Postów: 110
Pomógł: 10
Dołączył: 3.09.2006
Skąd: Bishop Auckland

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


niedawno zacząłem przygodę z AJAXem i rzecz, którą bardzo chcę się nauczyć jest prawidłowe parsowanie zewnętrznych plików XML. Sterte książek mam przed sobą, ale nie mogę zrozumieć pewnego zachowania..

Wszystko robię na przykładnie pliku XML z last.fm (http://cdn.last.fm/bestof/2009/bestof2009.xml).

Chciałem wyodrębnić 10 pierwszych nazw i lokacji z tego pliku.. Zanim przeszedłem do tworzenia całego skryptu, utworzyłem nowy plik i zapisałem w nim tylko jednego artyste, czyli struktura wyglądała tak:
  1. <?xml version="1.0" ?>
  2. <artist>
  3. <position>1</position>
  4. <name>Lady GaGa</name>
  5. <location>New York, United States</location>
  6. <iso>US</iso>
  7. <url>http://www.last.fm/music/Lady+GaGa</url>
  8. <images>
  9. <small>http://userserve-ak.last.fm/serve/34/27576621.png</small>
  10. <medium>http://userserve-ak.last.fm/serve/64/27576621.png</medium>
  11. <large>http://userserve-ak.last.fm/serve/126/27576621.png</large>
  12. </images>
  13. <stats>
  14. <overall>
  15. <plays>35562384</plays>
  16. <listeners>955164</listeners>
  17. </overall>
  18. <year>
  19. <listeners>755309</listeners>
  20. <gigs>253</gigs>
  21. <festivals>54</festivals>
  22. <users_attended>15709</users_attended>
  23. </year>
  24. </stats>
  25. <tags>
  26. <tag>
  27. <name>pop</name>
  28. <url>http://www.last.fm/tag/pop</url>
  29. </tag>
  30. <tag>
  31. <name>dance</name>
  32. <url>http://www.last.fm/tag/dance</url>
  33. </tag>
  34. <tag>
  35. <name>electronic</name>
  36. <url>http://www.last.fm/tag/electronic</url>
  37. </tag>
  38. </tags>
  39. <album>
  40. <name>The Fame</name>
  41. <url>http://www.last.fm/music/Lady+GaGa/The+Fame</url>
  42. <images>
  43. <small>http://userserve-ak.last.fm/serve/34s/24408387.png</small>
  44. <medium>http://userserve-ak.last.fm/serve/64s/24408387.png</medium>
  45. <large>http://userserve-ak.last.fm/serve/126/24408387.png</large>
  46. </images>
  47. <stats>
  48. <overall>
  49. <plays>17626729</plays>
  50. <listeners>359732</listeners>
  51. </overall>
  52. <year>
  53. <plays>18487195</plays>
  54. </year>
  55. </stats>
  56. <tags>
  57. <tag>
  58. <name>pop</name>
  59. <url>http://www.last.fm/tag/pop</url>
  60. </tag>
  61. <tag>
  62. <name>albums i own</name>
  63. <url>http://www.last.fm/tag/albums%20i%20own</url>
  64. </tag>
  65. <tag>
  66. <name>dance</name>
  67. <url>http://www.last.fm/tag/dance</url>
  68. </tag>
  69. </tags>
  70. </album>
  71. </artist>


Mój kod wygląda naastępująco:
  1. function doAjax() {
  2. var myRequest = new XMLHttpRequest;
  3. myRequest.open("GET","small.xml",false);
  4. myRequest.send(null);
  5. response = myRequest.responseXML;
  6. if(myRequest.readyState == 4) {
  7. if(myRequest.status == 200) {
  8. var artist = response.getElementsByTagName("name")[0].firstChild.nodeValue;
  9. var location = response.getElementsByTagName("location")[0].firstChild.nodeValue;
  10. window.document.getElementById('resultDiv').innerHTML = artist + "-" + location;
  11. }
  12. }
  13. }


dzięki niemu bezproblemowo otrzymuje string "Lady Gaga - New York, United States". Problem zaczyna się gdy do pliku XML dodam kolejnego artyste. Wtedy podmiana elementu tablicy na 1 nie działa, a również wyświetlanie pierwszego elementu [0] nie jest ponownie możliwe.

próbowałem najpierw wybierać wszystkie znaczniki ARTIST i z niego wziąć childNodes[1] dla nazwy wykonawcy, ale również nie działa..

ktoś może potrafi wytknąć mi błędy jakie robię w rozumowaniu tego parsowania, jakiekolwiek wskazówki i naprowadzenie na właściwą drogę sa na wagę złota smile.gif

Zauważyłem dziwną rzecz. postanowiłem sam stworzyć prosty plik xml, który przedstawia się następująco:
  1. <?xml version="1.0" ?>
  2. <artist>
  3. <name>Artysta 1</name>
  4. <location>Lokalizacja 1</location>
  5. </artist>
  6. <artist>
  7. <name>Artysta 2</name>
  8. <location>Lokalizacja 2</location>
  9. </artist>


wyświetlanie robię poprzez:

  1. var myRequest = new XMLHttpRequest;
  2. myRequest.open("GET","small.xml",false);
  3. myRequest.send(null);
  4. response = myRequest.responseText;
  5. if(myRequest.readyState == 4) {
  6. if(myRequest.status == 200) {
  7. document.getElementById('writeroot').innerHTML += response;
  8. }
  9. }


i wyświetla ale tylko wszystko co jest zawarte w pierwszym <artist></artist>, a specjalnie zmieniłem na responseText, aby otrzymać cały plik. Czy to może być coś z konfiguracją serwera, z plikiem? czy coś innego? jestem w kropce, a błąd wydaje się być absurdalny..

Ten post edytował TheaSiX 13.01.2010, 22:08:14
Go to the top of the page
+Quote Post
taktu
post
Post #2





Grupa: Zarejestrowani
Postów: 89
Pomógł: 7
Dołączył: 19.05.2008

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


odp. jQuery, manipulacje DOM w JS to istne bagno, dlatego ta biblioteka ( i kilka innych żeby nie było winksmiley.jpg ) jest tak popularna.


--------------------
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 - 18:45