2016-03-25 10 views
1

Farklı değerlere sahip bir diziye sahip olmak, aynı durumu paylaşan ve kötü ingilizce için özür dilerim, diğerinin yanında olan iki öğeyi bir sorguda nasıl karşılaştırabilirim, o İşte Anadilim değil xml var:Xquery, bir dizideki bir öğeyi bir sonraki karşılaştırmak için

<prac1516> 
    <torns> 
     <torn codi="A" nom="Matí" preu="100" /> 
     <torn codi="B" nom="Tarda" preu="150" /> 
     <torn codi="C" nom="Nit" preu="200" /> 
    </torns> 

    <tipus> 
     <espec id="e1" torn="C">Musica</espec> 
     <espec id="e2">Cine</espec> 
     <espec id="e3" torn="B">Xerrada</espec> 
     <espec id="e4">Festa Infantil</espec> 
    </tipus> 

    <clients> 
     <client id="1">Marti</client> 
     <client id="2">Jana</client> 
     <client id="3">Edu</client> 
     <client id="4">Berta</client> 
     <client id="5">Laia</client>  
     <client id="6">Santi</client> 
     <client id="7">Pau</client> 
     <client id="8">Mia</client> 
    </clients> 

    <calendari> 
     <reserva client="1" data="2016-01-01" torn="A" espec="e2" /> 
     <reserva client="2" data="2016-01-01" torn="B" espec="e3" /> 
     <reserva client="3" data="2016-01-02" torn="C" espec="e3" /> 
     <reserva client="4" data="2016-01-03" torn="A" espec="e2" /> 
     <reserva client="4" data="2016-01-03" torn="B" espec="e4" /> 
     <reserva client="2" data="2016-01-03" torn="C" espec="e4" /> 
     <reserva client="8" data="2016-01-04" torn="A" espec="e3" /> 
     <reserva client="4" data="2016-01-04" torn="C" espec="e3" /> 
     <reserva client="3" data="2016-01-05" torn="A" espec="e1" /> 
     <reserva client="7" data="2016-01-05" torn="B" espec="e1" /> 
     <reserva client="2" data="2016-01-06" torn="A" espec="e1" /> 
     <reserva client="1" data="2016-01-06" torn="B" espec="e2" /> 
     <reserva client="3" data="2016-01-06" torn="B" espec="e2" /> 
     <reserva client="4" data="2016-01-08" torn="B" espec="e3" /> 
     <reserva client="7" data="2016-01-08" torn="C" espec="e2" /> 
     <reserva client="8" data="2016-01-09" torn="A" espec="e2" /> 
     <reserva client="9" data="2016-01-09" torn="B" espec="e4" /> 
     <reserva client="2" data="2016-01-09" torn="C" espec="e4" /> 
     <reserva client="2" data="2016-01-10" torn="A" espec="e3" /> 
     <reserva client="1" data="2016-01-10" torn="B" espec="e2" /> 
     <reserva client="1" data="2016-01-10" torn="C" espec="e1" /> 
    </calendari> 

</prac1516> 
bir yırtık bir var ki tarihleri ​​(veri) görmek istiyorum

ve bu yırtık B veya yırtık B sonra ve bu yırtık C

sonra

Bunun istediğimi yapacağını sanıyordum ama hayır! :

let $w := 
    for $x in //reserva 
    let $d := //reserva/@data 
    return $d 
for $r in (1 to 21) 
where (//reserva[@data=$w[$r]]/@torn='A' and //reserva[@data=$w[$r+1]]/@torn='B') or (//reserva[@data=$w[$r]]/@torn='B'and //reserva[@data=$w[$r+1]]/@torn='C') 
return $w[$r] 
+0

, XML verilen söz dizisi üretmek için örnek XML ve temel XQuery'yi gönderin. Ve sonuç olarak ne elde etmek istediğinizi açıklayın ... – har07

+0

Güncellenmiş soru çok daha iyi! +1 – har07

+0

'data' özniteliği benzersiz değil, bu nedenle 'data' öznitelik değeri ile filtrelenen asıl 'reserva' elemanını alamıyorsunuz ... – har07

cevap

1

Çok gibi following-sibing::reserva[1] kullanarak bir sonraki reserva eleman alabilirsiniz: İngilizcenizi tamamlamak için

for $r in //reserva 
let $next_r := $r/following-sibling::reserva[1] 
where 
    ($r/@torn eq 'A' and $next_r/@torn eq 'B') 
     or 
    ($r/@torn eq 'B' and $next_r/@torn eq 'C') 
return $r/@data 
+0

hi @Asdemuertes [kabul] (http: //meta.stackexchange. com/questions/5234/nasıl-cevap-cevap-iş-cevap) sizin için işe yaraydı, ya da eğer soru bir şekilde cevap vermediyse lütfen yorum yapın. Teşekkürler – har07