Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

node()??

[es] :: XML :: node()??

[ Pregleda: 5530 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

havramm
Miroslav Havram
Software Developer / Engineer
Beograd

Član broj: 4603
Poruke: 255
*.proxy.cg.yu



Profil

icon node()??09.08.2003. u 18:07 - pre 251 meseci
U XPath 1.0 specifikaciji stoji da funkcija za testiranje tipa cvora node() vraca true za bilo koji cvor bilo kog tipa (http://www.w3.org/TR/xpath#node-tests), medjutim, ako probam nesto ovako:

/rootElement/someElement/@someAttribute = node()

ovo vraca false. Da li neko zna o cemu se radi?
If it's a girl then they're gonna call it Sigourney, after an actress. If it's a boy, then they're gonna call it Rodney, after Dave!
 
Odgovor na temu

-zombie-
Tomica Jovanovic
freelance programmer
ni.ac.yu

Član broj: 4128
Poruke: 3448
*.verat.net

Sajt: localhost


+5 Profil

icon Re: node()??09.08.2003. u 20:19 - pre 251 meseci
prvo, uopšte mi na prvi pogled nije jasno šta želiš time da dobiješ. šta očekuješ da wrati taj xpath izraz?

dalje, nisam siguran da sam viđao takvo korišćenje operatora "=". (ovo ne znači da nije ispravno, već samo da ja nisam video).

operator = se obično koristi nad atributima, npr *[lang="sr"], dok se node() obično koristi za pravljenje liste nodova koji svi zadovoljavaju neki uslov, i valjda obavezno sa nekim "prefixom", npr child::node() (ovo vraća listu svih elemenata i atributa tekućeg noda), i retko se koristi zato što za većinu upotreba postoje skraćenice (*, ., //, ...)

i konačno, možda je ovo i pravilan xpath izraz, ali jednostavno vraća false zato što ne postoji /rootElement/someElement/@someAttribute nod?


dakle, pokušaj da objasniš šta želiš da postigneš, i verovatno postoji drugi način za to...

 
Odgovor na temu

havramm
Miroslav Havram
Software Developer / Engineer
Beograd

Član broj: 4603
Poruke: 255
*.proxy.cg.yu



Profil

icon Re: node()??10.08.2003. u 12:06 - pre 251 meseci
U sustini nisam imao nameru da ista dobijem, nego sam se cisto igrao i isprobavao razne stvari. Zaintrigiralo me je to sto neke stvari odstupaju od specifikacije sa w3.org. Naime ako stoji da postoji 7 vrsta cvorova (root, elementi, atributi, komentari, instrukcije procesiranja, namespace-ovi i textualni cvorovi), sledi da je i atribut cvor, zar ne (doduse specifican - nije child, ali ima parent-a)? Sa druge strane, ako node() vraca true za bilo koji tip cvora, za ocekivati je da vrati true i za atribut.

Takodje, ovakvo koriscenje operatora '=' je legalno, veruj mi. Npr. ovo ispisuje true:
Code:
<xslt:value-of select="boolean(/rootElement = node())" />

Kao sto sam i rekao, nisam zeleo nesto posebno da postignem, nego sam samo isprobavao neke stvari, tako da sam zeleo da probam sa bas takvim xpath izrazom.

Sada cu malo da iskomentarisem tvoj odgovor (bez namere za "nabijanje na nos" ).
Citat:
dok se node() obično koristi za pravljenje liste nodova koji svi zadovoljavaju neki uslov, i valjda obavezno sa nekim "prefixom"
node() moze da se koristi i kao uslov, moze i bez prefix-a, npr. *[node()] vraca sve elemente, koji imaju podelemente.

Jos jedna opaska -
Citat:
child::node() (ovo vraća listu svih elemenata i atributa tekućeg noda)
sa ovim se ne slazem, posto atributi nisu child-ovi nijednog cvora - ali imaju roditelja, ovo vraca samo listu svih elemenata.

Pozdrav
If it's a girl then they're gonna call it Sigourney, after an actress. If it's a boy, then they're gonna call it Rodney, after Dave!
 
Odgovor na temu

-zombie-
Tomica Jovanovic
freelance programmer
ni.ac.yu

Član broj: 4128
Poruke: 3448
*.verat.net

Sajt: localhost


+5 Profil

icon Re: node()??10.08.2003. u 14:47 - pre 251 meseci
da, naravno atribut nod nije dete element noda.. lapsus.. ;)

zaneo sam se zato što znam da node() jeste tačno i za atribute ;)


a za ostalo, pa.. definitivno se čini da si u pravu. onda kaži u kojoj implementaciji XSLT-a si ovo isprobavao (miriše na m$ ;) i na kojim primerima, da probamo i u ostalima, i da vidimo koliko ko prati preporuke w3c...

 
Odgovor na temu

havramm
Miroslav Havram
Software Developer / Engineer
Beograd

Član broj: 4603
Poruke: 255
*.proxy.cg.yu



Profil

icon Re: node()??10.08.2003. u 19:05 - pre 251 meseci
U pravu si, jeste Microsoftov XSLT procesor (msxsl), takodje i ActiveState VisualXSLT. U attach-u se nalaze test file-ovi. Rezultati su sledeci (kod mene...):

msxsl (sa msxml4.0): true false false false false
msxsl (sa msxml2.6): true true true true false
ActiveState VisualXSLT (sa Xalan XSLT procesorom): true false false false false
ActiveState VisualXSLT (.NET Framework - System.Xml): true true true true false

Ako probas sa jos nekim XSLT procesorima (mozda Xerces) ili na Linux-u, bas bih voleo da
znam za rezultate... tj. sta vraca...

Sve sto mogu da zakljucim iz ovoga, jeste da se preporuke bas i ne slusaju...

Pozdrav
If it's a girl then they're gonna call it Sigourney, after an actress. If it's a boy, then they're gonna call it Rodney, after Dave!
Prikačeni fajlovi
 
Odgovor na temu

-zombie-
Tomica Jovanovic
freelance programmer
ni.ac.yu

Član broj: 4128
Poruke: 3448
*.verat.net

Sajt: localhost


+5 Profil

icon Re: node()??13.08.2003. u 02:47 - pre 251 meseci
to za sve razlike je fazon sa prvim match-om u xslt fajlu. dobijaju se slično-različiti rezultati kada menjaš

<xslt:template match="/">
i
<xslt:template match="rootElement">

(ova dva načina različito postavljaju tekuće mesto u hijerarhiji u odnosu na koju se relativno računaju ostale putanje..)

takođe, neke implementacije (pogrešno) tretiraju
<?xml-stylesheet type="text/xsl" href="test.xslt"?>
kao početni nod, tako da to zajebe sve ostale testove u tvom primeru.. ovo se lako vidi ako dodaš da ispiše rezultat same node() funkcije
<xslt:value-of select="node()" />
i menjaš prvi match između "/" i "rootElement".



ali sve implementacije su sasglasne da poslednji uslov treba da vrati false. naime, to ipak jeste po specifikacij, samo nema ko da čita :-PpP

Citat:

If one object to be compared is a node-set and the other is a string, then the comparison will be true if and only if there is a node in the node-set such that the result of performing the comparison on the string-value of the node and the other string is true.

http://www.w3.org/TR/xpath#booleans

znači, fazon je što si u tvojim primerima poredio nodove (ili setove nodova) sa funkcijom node() koja sama vraća set nodova.. osim u poslednjem slučaju gde je vraćena vrednost atributa a ne sam nod atibuta.

primer ovog pravila možeš videti i ako recimo u <e11> tag dodaš neki text (pa to postane text node koji ima string reprezentaciju)

Code:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="test.xslt"?>
<rootElement>
    <e1 attr1="1" attr2="2">
        <e11>BLAH</e11>
    </e1>
    <e2 attr3="3" />
</rootElement>


i ako pokreneš ovaj dokument (sa istim onim styleshitom) dobićeš false za pretposlednji test...


(btw, znam da, tehnički, node() nije funkcija nego node test, ali kada se koristi ovako u poređenju, onda mi se čini da se ponaša više kao funkcija...)


ako je ova poruka imala imalo smisla nekome, svaka čast. ja sam je sam napisao, i sad je čitam par puta, ali mi nije sve najjasnije ;)
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: node()??13.08.2003. u 08:32 - pre 251 meseci
Citat:
havramm:
Sve sto mogu da zakljucim iz ovoga, jeste da se preporuke bas i ne slusaju...


Cekaj, ocekujes od Microsoft-a da slusa preporuke W3C-a? - Oni to veoma retko rade. Drugo, maltene sve XML tehnologije jos uvek nisu standard, tako da su odstupanja sasvim logicna. :(

Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

[es] :: XML :: node()??

[ Pregleda: 5530 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.