Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Obiekt XMLDocument - jak się dobrać?
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
TomASS
Mam taki xml:
  1. <changes>
  2.    <modif>
  3.        <rekord id="1">
  4.               <imie>Tomek</imie>
  5.               <nazwisko>xxxx</nazwisko>
  6.        </rekord>
  7.      <rekord id="3">
  8.               <nazwisko>zzzzz</nazwisko>
  9.        </rekord>
  10.    </modif>
  11.    <add>
  12.        <rekord id="4">
  13.                <id>4</id>
  14.                <imie>Krysia</imie>
  15.                <nazwisko>Fajna</nazwisko>
  16.        </rekord>
  17.    </add>
  18.    <del>
  19.        <rekord id="2">
  20.                <id>2</id>
  21.                <imie>Marta</imie>
  22.                <nazwisko>cxz</nazwisko>
  23.        </rekord>
  24.     </del>
  25. </changes>

i chciałbym się dobrać do niego przy pomocy JS.
Tak:
modif->operacje na rekordach zawartych w modif (w pętli)
del->inne operacje na rekordach zawartych w del (w pętli)
add->jeszcze inne operacje na rekordach zawartych w add(w pętli)
próbowałem tak (gdzie obj.responseXML to XMLDocument powyższego pliku):
Kod
xmldoc = obj.responseXML;
root = xmldoc.documentElement;
modif = root.getElementsByTagName("modif");
records = modif.getElementsByTagName("record");
alert(record[0].nodeValue);

ale niestety nie działa :/

Dzięki za pomoc/wskazówki/linki smile.gif
mariuszn3
nodeValue zwraca zawartość tekstową węzła. Jeśli węzeł nie jest węzłem tekstowym nodeValue nie zwróci Ci nic.
W Twoim przypadku record jest elementem nie węzłem tekstowym.
Jeśli chcesz się dobrać do tekstu zawartego w elementach, możesz na dwa sposoby albo przez:
  • textContent (ale to nie działa na pewno w IE) to jest jakby cały tekst zawarty w podwęzłach podany jako jeden ciąg znaków.. dla record[0] (record[0].textContent) w Twoim przykładzie by on wyglądał tak: '
    Tomek
    xxxx
    '
  • albo poprzez nodeValue odwołując się do konkretnego węzła tekstowego np. by pobrać zawartość elementu 'imie' z record[0]:
    record[0].getElementsByTagName['imie'][0].firstChild.nodeValue
smile.gif
TomASS
wielkie dzięki smile.gif mam jeszcze szybkie pytanie. Jak w JavaScript usuwa się ostatni element z tablicy?

Jak robie:
Kod
delete mapa[mapa.length-1];

gdzie mapa to tabela, to ostatni element będzie istniał i będzie maił wartość undefined :/
mariuszn3
Nie ma czegoś takiego jak 'delete' w javascript.. aby usunąć ostatni element z tablicy robisz po prostu coś takiego:
Kod
array.pull()

Pod tym linkiem są wszystkie użyteczne funkcje do operacji na tablicach
TomASS
Dzięki wielkie za pomoc i linka smile.gif

Wpisałem w google::JavaScript+usuwanie zmiennej i wszedłem na pierwszą stonę:

Kod
g = 17;
delete g;


Dlatego tak się zasugerowałem smile.gif A mogłem przeczytać dokładniej tongue.gif
mariuszn3
oo to nie miałem o tym operatorze pojęcia smile.gif Dzięki za tą podpowiedź! Nawet nie sprawdzałem tego, bo jakoś z założenia wydał mi się nie pododbny do niczego w javascript.
W takim razie Twój przykład powyżej jak najbardziej działa.. a 'udefined' to jest typ zmiennych nie zadeklarowanych.. wszystko czego nie ma zwróci Ci 'undefined'
TomASS
Cytat
Dzięki za tą podpowiedź!

Proszę bardzo smile.gif Miło mi było pomóc smile.gif

Cytat
Nawet nie sprawdzałem tego, bo jakoś z założenia wydał mi się nie pododbny do niczego w javascript.

No nie ? tongue.gif

Cytat
W takim razie Twój przykład powyżej jak najbardziej działa.. a 'udefined' to jest typ zmiennych nie zadeklarowanych.. wszystko czego nie ma zwróci Ci 'undefined'

Zgadza się, ale będzie to wyglądało tak:

Kod
tablica[3]=undefined;

ale w tablicy nadal będzie istniał ten element. Jak chcę usunąć ostatni to tablica będzie miała taką samą długość jak przed operacją delete, a nie za bardzo mi o to chodzi :/

Posłuchałem się Ciebie i użyłem array.pull(). Dzięki ! smile.gif
mariuszn3
Cytat(TomASS @ 9.08.2006, 20:08 ) *
ale w tablicy nadal będzie istniał ten element. Jak chcę usunąć ostatni to tablica będzie miała taką samą długość jak przed operacją delete, a nie za bardzo mi o to chodzi :/

to ciekawa uwaga.. w sumie nie spodziewałbym się tego..
Też warto pamiętać, że właściwość length to nie mówi tak naprawdę o ilości elementów w tablicy. Konkretnie jest to wartość równa największemu kluczowi istniejącego elementu tablicy plus jeden.
Przykładowo:
Kod
var tablica = new Array;
tablica[345] = 'cokolwiek';
alert(tablica.length); // zwróci 346

smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.