![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 160 Pomógł: 4 Dołączył: 22.04.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Mam mały problem z parsowaniem xml-a.
Mam pięć elementów w xml-u a musze podać że mam 10 i krok pętli zwiększyć do 2, żeby 'skakała' co 2. Nie rozumiem dlaczego sie tak dzieje ![]() Poniżej daje kod. Kod function getHTML() { var url = 'test.xml'; var myAjax = new Ajax.Request( url, { onComplete: showResponse }); } function showResponse(originalRequest) { //$('mails').innerHTML = originalRequest.responseText; d = $("mails"); record = originalRequest.responseXML.getElementsByTagName("record"); for (i = 0; i < record.length; i++) { tr = document.createElement("tr"); td = document.createElement("td"); for (j = 1; j < 10; j+=2) { // w tej linii musiałem podwoić krok pętli td = document.createElement("td"); td.innerHTML = record[i].childNodes[j].childNodes[0].nodeValue; tr.appendChild(td); } d.appendChild(tr); } } test.xml
Dodam że problem jest chyba w przeglądarkach innych niż ie Ten post edytował yaro 30.07.2006, 17:57:25 -------------------- |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 352 Pomógł: 0 Dołączył: 22.01.2006 Ostrzeżenie: (0%) ![]() ![]() |
Chodzi o to, że węzły tekstowe też w Twojej pętki są brane pod uwagę jako dzieci elementu.. więc kolejność wychodzi taka - td, #text, td, #text itd.
Możesz to naprawić poprzez wyciągnięcie listy elementów (czyli węzłów o nodeType równym 1) i potem iterowanie tej listy |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Dodam jedynie ze w Twoich wezlach tekstowych sa biale znaki (spacje i znaki przejscia do nowej lini). Mozesz usunac biale znaki w pliku xml i nie bedziesz musial nic zmieniac po stronie js, ale to co podpowiada mariuszn3 jest lepsze.
-------------------- bigZbig (Zbigniew Heintze) | blog.heintze.pl
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 160 Pomógł: 4 Dołączył: 22.04.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Zrobiłem coś takiego ale niestety dalej nie działa
![]() Szukałem w kursie Javascript Cookbook i tam było coś podobnego i na podstawie tego co było w kursie to zrobiłem to, ale nie dokońca dobrze ![]() Prosze o pomoc, bo już nie mam sił Kod function showResponse(originalRequest)
{ d = $("mails"); record = originalRequest.responseXML.getElementsByTagName("record"); for (i = 0; i < record.length; i++) { tr = document.createElement("tr"); for (j = 0; j < record[i].childNodes.length; j++) { if (record[i].childNodes[j].nodeType != 1) { record[i].removeChild(record.childNodes[record.childNodes.length - 1]); } else { td = document.createElement("td"); td.innerHTML = record[i].childNodes[j].firstChild.nodeValue; tr.appendChild(td); } } d.appendChild(tr); } } -------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 352 Pomógł: 0 Dołączył: 22.01.2006 Ostrzeżenie: (0%) ![]() ![]() |
Pierwszy błąd jaki widzę jest w pętli for w tej linijce:
Kod record[i].removeChild(record.childNodes[record.childNodes.length - 1]); zwróć uwagę, że zawsze kasujesz ostatni element a nie element o indeksie j. W ogóle po co go kasujesz chcesz usunąć wszystkie te zbędne węzły tekstowe? To raczej niepotrzebna robota. Choć może czegoś w Twoim algorytmie nie złapałem. Myśle, że najlepiej jak zrobisz podobnie tak jak poprzednio tylko wyciągnij wszystkie elementy (nie węzły - to różnica) - tak jak Ci sugerowałem poprzednio. Jest nawet lepsza na to metoda niż porównywanie nodeType: Kod var recordElements = record[i].getElementsByTagName('*'); for (j = 0; j < recordElements.length; j++) { td = document.createElement("td"); td.innerHTML = recordElements[j].firstChild.nodeValue; tr.appendChild(td); } Tylko pamiętaj, że multiselektor (*) w getElementsByTagName nie zadziała w IE5 pod windowsem. Zamiast tego dla IE5 można zastosować własność 'all' zwraca dokładnie to samo. Ten post edytował mariuszn3 31.07.2006, 23:30:43 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 160 Pomógł: 4 Dołączył: 22.04.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Chciałem sie najpierw sam troche pomęczyć i szukałem pomocy w kursach, ale jak widać co pomoc człowieka to będzie dobrze
![]() Dzięki, już działa dobrze -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 24.07.2025 - 17:06 |