Thread View: pl.comp.xml
8 messages
8 total messages
Started by klapek
Wed, 09 Jun 2010 02:03
ancestor vs preceding
Author: klapek
Date: Wed, 09 Jun 2010 02:03
Date: Wed, 09 Jun 2010 02:03
6 lines
815 bytes
815 bytes
Witam, Nie rozumiem jaka jest roznica w XPath miedzy ancestor a preceding. Moze mi ktos wytlumaczyc? Pozdr,
Re: ancestor vs preceding
Author: szomiz
Date: Wed, 09 Jun 2010 06:56
Date: Wed, 09 Jun 2010 06:56
13 lines
1531 bytes
1531 bytes
"klapek" <klapek01@o2.pl> wrote in message news:humsp3$b1l$1@inews.gazeta.pl... > Witam, > > Nie rozumiem jaka jest roznica w XPath miedzy ancestor a preceding. Moze > mi ktos wytlumaczyc? Ancestor to kolejne parenty (parent, parent parenta, az do documentElement). Prececing, to wezly ktore wystapily w dokumencie "wczesniej" (patrzac "liniowo", np. jak SAX'em) ale *bez* ancestorow. sz.
Re: ancestor vs preceding
Author: klapek
Date: Wed, 09 Jun 2010 16:17
Date: Wed, 09 Jun 2010 16:17
31 lines
1682 bytes
1682 bytes
> Ancestor to kolejne parenty (parent, parent parenta, az do
> documentElement).
>
> Prececing, to wezly ktore wystapily w dokumencie "wczesniej" (patrzac
> "liniowo", np. jak SAX'em) ale *bez* ancestorow.
>
> sz.
Hm..
$ancestor = $xpath->query('//ancestor::*');
for($i=0; $i<$ancestor->length; $i++){
echo $ancestor->item($i)->nodeName."<br>";
}
i to samo dla:
$preceding = $xpath->query('//preceding::*');
Zwraca cale drzewo XML, niemal to samo, z tą różnicą, że $ancestor łapie
nazwe korzenia i nie drukuje pustych elementów.
przy: query('//ancestor::miejsce');
gdzie 'miejsce' jest zagniezdzone: korzen/adres/miasto/miejsce drukuje
tylko: miejsce.
Sadzilem, ze dostane wszystkie parenty, czyli wspomniane korzen, adres,
miasto..
Dalej nie rozumiem..
Re: ancestor vs preceding
Author: szomiz
Date: Wed, 09 Jun 2010 16:28
Date: Wed, 09 Jun 2010 16:28
15 lines
1662 bytes
1662 bytes
"klapek" <klapek01@o2.pl> wrote in message news:huoerl$dq7$1@inews.gazeta.pl... > Dalej nie rozumiem.. Bo pytasz o //ancestor::* Co "uniewaznia" kontekst zapytania. Mozna powiedzec, ze ustawia go w *kazdym* miejscu dokumentu. Mniej wiecej o cos takiego tymi dwoma slaszami pytasz: /descendant-or-self::*/ancestor::* /descendant-or-self::*/preceding::* sz.
Re: ancestor vs preceding
Author: klapek
Date: Wed, 09 Jun 2010 17:52
Date: Wed, 09 Jun 2010 17:52
18 lines
1481 bytes
1481 bytes
szomiz wrote:
> "klapek" <klapek01@o2.pl> wrote in message
> news:huoerl$dq7$1@inews.gazeta.pl...
>
>> Dalej nie rozumiem..
>
> Bo pytasz o //ancestor::*
>
> Co "uniewaznia" kontekst zapytania.
Tak też rozumiem, że // oznacza 'z dowolnego miejca', zwróciłem uwagę na
różnice między ancestor a preceding w kontekście takiego wywołania.
Natomiast zastanawia mnie dlaczego query('//ancestor::miejsce') nie wyłapuje
wszystkich rodziców. W moim rozumieniu w query wstawiłem: wybierz wszystkich
rodziców elementu 'miejsce', który znajduje się 'gdzieś tam' w dokumencie.
Re: ancestor vs preceding
Author: klapek
Date: Wed, 09 Jun 2010 17:56
Date: Wed, 09 Jun 2010 17:56
8 lines
1012 bytes
1012 bytes
ok, już rozumiem:)
powinno być: query('//miejsce/ancestor::*')
Dzięki za pomoc!
Pozdrawiam,
klapek
Re: ancestor vs preceding
Author: szomiz
Date: Wed, 09 Jun 2010 20:09
Date: Wed, 09 Jun 2010 20:09
18 lines
1986 bytes
1986 bytes
"klapek" <klapek01@o2.pl> wrote in message
news:huokkr$3e1$1@inews.gazeta.pl...
> powinno być: query('//miejsce/ancestor::*')
Niekoniecznie. Nic nie wiadomo o wezle do ktorego wykonujesz zapytanie. W
implementacjach zapytanie xPath, to metoda *wezla*.
Jezeli do wezla "miejsce", to wystarczy po prostu "ancestor::*".
Jezeli pytasz wezla document/documentElement wtedy mozna w ten sposob, ale
przy regularnym i duzym pliku dla wszyskich //miejsce moze byc sprawdzane
czy nie ma jakiegos innego ancestora ;)
Obejrzyj dokladnie pliki, bo moze wystarczyc mniej mulace
"//miejsce[1]/ancestor::*"
sz.
Re: ancestor vs preceding
Author: klapek
Date: Sat, 12 Jun 2010 15:29
Date: Sat, 12 Jun 2010 15:29
23 lines
1864 bytes
1864 bytes
W pliku miałem jeden węzeł 'miejsce' dlatego tak napisałem. Z tego co próbowałem, jedynym sposobem żeby dostać rodziców to właśnie '//miejsce/ancestor::*' natomiast nie wiem jak miałbym wywołać samo 'ancestor::*'.. chyba, że przez getElementsByTagName, a później z kontekstu wywołać to query, zgaduję, nie próbowałem. Pozdrawiam, klapek > Niekoniecznie. Nic nie wiadomo o wezle do ktorego wykonujesz zapytanie. W > implementacjach zapytanie xPath, to metoda *wezla*. > > Jezeli do wezla "miejsce", to wystarczy po prostu "ancestor::*". > > Jezeli pytasz wezla document/documentElement wtedy mozna w ten sposob, ale > przy regularnym i duzym pliku dla wszyskich //miejsce moze byc sprawdzane > czy nie ma jakiegos innego ancestora ;) > > Obejrzyj dokladnie pliki, bo moze wystarczyc mniej mulace > "//miejsce[1]/ancestor::*" > > sz.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads