🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

8 total messages Started by klapek Wed, 09 Jun 2010 02:03
ancestor vs preceding
#10238
Author: klapek
Date: Wed, 09 Jun 2010 02:03
6 lines
815 bytes
Witam,

Nie rozumiem jaka jest roznica w XPath miedzy ancestor a preceding. Moze 
mi ktos wytlumaczyc?

Pozdr,
Re: ancestor vs preceding
#10239
Author: szomiz
Date: Wed, 09 Jun 2010 06:56
13 lines
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
#10240
Author: klapek
Date: Wed, 09 Jun 2010 16:17
31 lines
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
#10241
Author: szomiz
Date: Wed, 09 Jun 2010 16:28
15 lines
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
#10242
Author: klapek
Date: Wed, 09 Jun 2010 17:52
18 lines
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
#10243
Author: klapek
Date: Wed, 09 Jun 2010 17:56
8 lines
1012 bytes
ok, już rozumiem:)

powinno być: query('//miejsce/ancestor::*')

Dzięki za pomoc!

Pozdrawiam,
klapek
Re: ancestor vs preceding
#10244
Author: szomiz
Date: Wed, 09 Jun 2010 20:09
18 lines
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
#10245
Author: klapek
Date: Sat, 12 Jun 2010 15:29
23 lines
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