[ CallMeSaMaster @ 28.12.2010. 09:57 ] @
Pozdrav,

trebao bih izvuci ukupnu sumu pojedinih cvorova koji se nlaze u xmlu. Problem je sto se neki cvorovi nekada uopce ne pojavljuju a nekada se pojavljuju ali nemaju nikakvu vrijednost. Evo primjer:

Code:

<xml>
   <osoba1>
      <Plata>100</Plata>
      <Porez>17</Porez>
      <Ostalo>3</Ostalo>
   </osoba1>
   <osoba2>
      <Plata>200</Plata>
      <Ostalo>6</Ostalo>
   </osoba2>
   <osoba3>
      <Ostalo>15</Ostalo>
   </osoba3>
   <osoba4>
      <Plata>120</Plata>
      <Porez>4</Porez>
   </osoba4>
   <osoba5>
   </osoba5>
   <osoba6>
      <Plata></Plata>
      <Porez></Porez>
      <Ostalo></Ostalo>
    </osoba6>
</xml>


Kao sto se vidi, XML fajl koji meni dodje kao takav, i na koji nemam nikakav utjecaj, moze sadrzavati razne kombinacije.

Meni je potrebno da sada izvucem Sumu(Plata), Sumu(Porez), Sumu(Ostalo) za sve osobe.

Ja sam pokusavao funkcijom Sum(cvor) ali ona radi ako su sve vrijednosti nekog cvora popunjene. Inace dobiejm gresku

Molio bih nekoga ako ima neko rijesenje ili primjer kako da ovo odradim, da mi pomogne.

Pozdrav
[ Shadowed @ 28.12.2010. 10:13 ] @
U kom programskom jeziku radis?
[ mmix @ 28.12.2010. 10:31 ] @
verovatno hoce kroz XPath a prazan node se vraca kao NaN

mozda da ubacis filter u nodeset suma?

npr

sum(//xml/osoba/plata[not(text())])

ili mozda bolje

sum(//xml/osoba/plata[number(.)!=NaN])


btw zasto osoba1, osoba2,...? zasto ne <osoba id="1"> <osoba id="2"> ili slicno?



[ CallMeSaMaster @ 28.12.2010. 10:32 ] @
Sorry do mene. :) U svom tom zanosu sam zaboravio napisati da mi to treba u xslt-u...
[ CallMeSaMaster @ 28.12.2010. 10:33 ] @
Hvala za odgovor mmix, u sustini si u pravu ovo za naziv nodova. Ja sma to samo onako "hipoteticki" nabco...nemojte zamjeriti ;)
[ CallMeSaMaster @ 28.12.2010. 10:44 ] @
Citat:

verovatno hoce kroz XPath a prazan node se vraca kao NaN

mozda da ubacis filter u nodeset suma?

npr

sum(//xml/osoba/plata[not(text())])

ili mozda bolje

sum(//xml/osoba/plata[number(.)!=NaN])


btw zasto osoba1, osoba2,...? zasto ne <osoba id="1"> <osoba id="2"> ili slicno?


Sada probao, ali mi iz nekog rzaloga pokazuje "0" iako imam unijete neke vrijetnosti.Dobro je sto ne pise NaN, ali nije ispravna vrijednost.

I jos jedno pitanjce: Mogu li dobiti sumu svega istim ovim nacinom? Znaci suma(plata)+suma(poreza)+suma(ostalo)?
[ mmix @ 28.12.2010. 11:15 ] @
jesi siguran da ti je xpath uopste dobar (kad vec rece da si nabacao nodove)

da li se razvija u nodeset tvojih zeljenih nodova. Jel imas neku XML/XPATH/XSLT alatku za testiranje? AKo nemas skini neki, recimo sketchpath
[ CallMeSaMaster @ 28.12.2010. 12:17 ] @
Code:

    <PRAV>
        <ID>21219760</ID>
        <FIRMA>Frima</FIRMA>
        <ULICA>Testna 2</ULICA>
        <MJESTO/>
        <DRZAVA>Land</DRZAVA>
        <REG>3</REG>
        <UGO>2000</UGO>
        <VKA/>
        <VKAP/>
        <UPLK>2000</UPLKA>
        <UPLA/>
        <UPLT/>
    </PRAV>


Znaci evo postavio sam neizmjenjen XML sa podacima. Treba mi suma od svih UGO, VKA, VKAP, UPLK, UPLA, UPLT i suma svega zajedno.

Koristeci
Code:

sum(//PRAV/UGO[number(.)!=NaN]) + sum(//PRAV/VKA[number(.)!=NaN]) + sum(//PRAV/VKAP[number(.)!=NaN]) + sum(//PRAV/UPLK[number(.)!=NaN]) + sum(//PRAV/UPLA[number(.)!=NaN]) + sum(//PRAV/UPLT[number(.)!=NaN]) 

dobijem uvijek vrijednost "0" kao suma svega zajedno, iako bi trebala biti 4000.

Koristim inace ALTOVA XMLSpy....

[Ovu poruku je menjao CallMeSaMaster dana 28.12.2010. u 13:40 GMT+1]
[ CallMeSaMaster @ 28.12.2010. 13:47 ] @
Da li netko ima neku ideju, jer stavrno cu poludjet od ovoga...Nista ne kontam
[ mmix @ 28.12.2010. 14:54 ] @
UPLK tag ti je neispravan (typo?)

ajd pogledacu sta je problem sa ovim
[ mmix @ 28.12.2010. 15:08 ] @
tja NaN!=NaN (ima logike)

Code:
sum(//PRAV/UGO[number()>0]) + 
sum(//PRAV/VKA[number()>0]) +
sum(//PRAV/VKAP[number()>0]) + 
sum(//PRAV/UPLK[number()>0]) + 
sum(//PRAV/UPLA[number()>0]) + 
sum(//PRAV/UPLT[number()>0]) 
[ CallMeSaMaster @ 28.12.2010. 15:52 ] @
Zahvaljujem, to je bilo sto sam trazio