Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Obiekt XMLDocument - jak się dobrać?
TomASS
post 8.08.2006, 10:39:46
Post #1





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


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


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
mariuszn3
post 8.08.2006, 14:42:00
Post #2





Grupa: Zarejestrowani
Postów: 352
Pomógł: 0
Dołączył: 22.01.2006

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


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

Ten post edytował mariuszn3 8.08.2006, 14:42:59
Go to the top of the page
+Quote Post
TomASS
post 8.08.2006, 15:06:25
Post #3





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


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 :/


--------------------
Go to the top of the page
+Quote Post
mariuszn3
post 8.08.2006, 15:14:46
Post #4





Grupa: Zarejestrowani
Postów: 352
Pomógł: 0
Dołączył: 22.01.2006

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


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
Go to the top of the page
+Quote Post
TomASS
post 8.08.2006, 16:06:16
Post #5





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


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

Ten post edytował TomASS 8.08.2006, 16:08:38


--------------------
Go to the top of the page
+Quote Post
mariuszn3
post 8.08.2006, 16:15:58
Post #6





Grupa: Zarejestrowani
Postów: 352
Pomógł: 0
Dołączył: 22.01.2006

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


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'

Ten post edytował mariuszn3 8.08.2006, 16:17:10
Go to the top of the page
+Quote Post
TomASS
post 9.08.2006, 19:08:25
Post #7





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


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


--------------------
Go to the top of the page
+Quote Post
mariuszn3
post 9.08.2006, 20:45:52
Post #8





Grupa: Zarejestrowani
Postów: 352
Pomógł: 0
Dołączył: 22.01.2006

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


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
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: 13.08.2025 - 23:27