Oprettet man. d. 22. oktober 2007 kl. 09:35:14

fuxi
fuxi (17.064 point. Point ude: 760)

XSLT Variables ?

Hmm har siddet med et dumt problem et stykke tid nu og håber der er nogen der kan hjælpe. Jeg har følgende xml:

<results>
<result>
<id>12154</id>
<name>Peter</name>
<address>Somewhere</address>
<city>Some place</city>
</result>
<result>
<id>12154</id>
<name>Peter</name>
<address>Somewhere else</address>
<city>Some place else</city>
</result>
<result>
<id>12154</id>
<name>Peter</name>
<address>Somewhere</address>
<city>Some place</city>
</result>
</results>

Det jeg gerne vil er sådan set at lave en xslt som opføre sig ud fra følgende Pseudo kode:

If (city = previous_city) Then
  Show in one way
Else
  Show in another way
End If

Sagt med andre ord så vil jeg gerne have min xslt til at reagere på en måde når den forrige by er lig med den by jeg står ved nu. Er den ikke lig med den skal der gøres noget andet. Normalt ville jeg bare gøre det med at gemme en variable der indeholdt den forrige by, men det kan ikke lade sig gøre i XSLT så hvad gør man så?

/Fuxi

Skrevet man. d. 22. oktober 2007 kl. 11:26:29| #1

softspot
softspot (101.915 point)
www.softspot.dk
Du kan bruge rekursion.

Jeg kan desværre ikke give dig et konkret eksempel, da det er for længe siden jeg har arbejdet med XSLT, men logikken er, at du laver en template som tager din node-liste af "result", samt et indeks på den aktuelle node.

I denne template sørger du dels for at kontrollere om det er den første -, sidste - eller en mellemliggende node (og reagerer på en passende måde derefter :-)).

Hvis det er første node, skal du ikke sammenligne med den forrige (via indeks i "result"-nodelisten), men blot udskrive noden og kalde templaten selv (call-template og with-params), med "result"-nodelisten og indeks+1. Efterfølgende noder skal sammenlignes med den forrige ("result"-nodelisten[$indeks-1] vha. en choose/when/otherwise-konstruktion.

For at starte rekursionen skal du kalde den på samme måde, dvs. med call-template og with-params.

Skrevet man. d. 22. oktober 2007 kl. 14:19:11| #2

janegil
janegil (20.557 point)
select="by[.=preceding-sibling::by]" eller noe sånt.

Ser lite lettlest dokumentasjon på hvordan bruke preceding-sibling aksen.

Skrevet man. d. 22. oktober 2007 kl. 14:20:24| #3


Skrevet man. d. 22. oktober 2007 kl. 16:58:06| #4

fuxi
fuxi (17.064 point)
tak for de gode svar :) det ser ud til at jeg kan løse det nemmest med     select="by[.=preceding-sibling::by]" princippet :)

Mange tak... smid lige et svar softspot og janegil så kan i få point

Skrevet man. d. 22. oktober 2007 kl. 19:47:44| #5

softspot
softspot (101.915 point)
www.softspot.dk
Jeg synes janegil's løsning er væsentlig mere elegant og fiks end mit forslag, så de point synes jeg bare janegil skal have. Ellers tak for budet :-)

Skrevet man. d. 22. oktober 2007 kl. 22:32:30| #6

janegil
janegil (20.557 point)
Hvis du fikk de til å virke, så tar jeg gjerne pts.

Men legg også ut litt av koden, for jeg føler meg på riktig tynn is her - jeg skal sitte lenge med koden før jeg får det til selv.

XSLT er et område der man skal vokte seg vel for å begynne å løse problemer - har man et problem er det som regel fordi man burde gjort sakene på en helt annen måte. Dagens slogan: "Problemer skal ikke løses - de skal omgåes!"

Skrevet tor. d. 25. oktober 2007 kl. 13:35:22| #7

fuxi
fuxi (17.064 point)
Tak for svaret :)
Og flot af dig SoftSpot at give point videre :)

MVH
Fuxi

Skrevet tor. d. 25. oktober 2007 kl. 13:44:14| #8

softspot
softspot (101.915 point)
www.softspot.dk
Jeg erkender gerne når nogen har en bedre løsning end mig - så lærer jeg jo også noget... :)

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Hvordan kan man sender man en variable værdi fra html til...

Oprettet den 15. maj 2012 kl. 16.01
wesso giver 60 point for svar | Giv et svar »

komma, punktum problematik for at benytte SUM funktion i...

Oprettet den 25. april 2012 kl. 13.41
agentjna giver 30 point for svar | Giv et svar »

Split af xml fil

Oprettet den 21. marts 2012 kl. 09.14
agentjna giver 60 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger