Avatar billede mcole Nybegynder
31. august 2003 - 07:01 Der er 8 kommentarer og
1 løsning

Hjælp til XSL

Jeg har følgende XML:
<SystemData>
  <NameValues>
    <Navn>Givet</Navn>
    <NameValues>
      <Navn>placeOfSAignature</Navn>
      <Value>Givet på Christiansborg Slot,</Value>
      <Navn>Segl</Navn>
      <Value>Under Vor Kongelige Hånd og Segl</Value>
      <Navn type="Navn">Underskriver</Navn>
      <Value>Margrethe R.</Value>
      <Navn>Medunderskriver</Navn>
      <Value>Ole Stavad</Value>
    </NameValues>
  </NameValues>
</SystemData>

Jeg ønsker i XSL at udtrække den værdi der står i Value efter Navn = Segl
Jeg troede jeg kunne gøre sådan:

<xsl:value-of select="/SystemData/NameValues[Navn='Givet']/NameValues[Navn='Segl']/Value"/>

Men det virker ikke, jeg får jo bare returneret den første Value.

Jeg håber, der er nogen der kan anvise mig en metode.
Avatar billede Slettet bruger
01. september 2003 - 10:31 #1
Du kan bruge en "axis" der hedder "following-sibling::" - sådan her:

<xsl:value-of select="/SystemData/NameValues[Navn = 'Givet']/NameValues[Navn = 'Segl']/following-sibling::Value" />

/CS
Avatar billede janegil Nybegynder
01. september 2003 - 10:47 #2
Greystate: Jeg får null resultat ut av din formel med XMLspy og IE6 ?

Selv henger jeg med til
/SystemData/NameValues/Navn['Givet']/following-sibling::NameValues
men jeg får ikke det forventede resultat fra
/SystemData/NameValues/Navn['Givet']/following-sibling::NameValues/Navn['Segl']

(Hadde ventet 'Segl' men fikk 'placeOfSAignature').
Avatar billede janegil Nybegynder
01. september 2003 - 10:49 #3
mcole: Når following-sibling:: dukker opp i stilarkene, er det gjerne et tegn på dårlig XML-design. 'Navn' og 'NameValues' på forskjellige nivåer virker også litt tvilsomt.

Men jeg vet ikke om du har muligheten til å endre XML-skjemaet?
Avatar billede janegil Nybegynder
01. september 2003 - 10:57 #4
<xsl:value-of select="/SystemData/NameValues[Navn = 'Givet']/NameValues/Navn[.='Segl']/following-sibling::Value"></xsl:value-of>
Avatar billede janegil Nybegynder
01. september 2003 - 11:01 #5
og forskjellen på min og greystates kode er at hans kode ber om en Value på samme nivå som NameValues, hvilket ikke finnes.

men hva er feilen med mitt første forsøk?
Hvis ikke Navn['Segl'] betyr det samme som Navn[.='Segl'] , hva betyr det så?
Avatar billede Slettet bruger
01. september 2003 - 11:02 #6
janegil > You're so right :-)

Man skal da også hele tiden holde øje med "current-node" :-)

/CS
Avatar billede Slettet bruger
01. september 2003 - 11:07 #7
janegil > Jeg tror parseren forsøger at cast'e 'Segl' til en integer - Navn[3] er f.eks. det samme som Navn[position() = 3]...

/CS
Avatar billede websmith Nybegynder
01. september 2003 - 11:08 #8
Hvad med en simpel:

<xsl:for-each select="/SystemData/NameValues[Navn='Givet']/NameValues[Navn='Segl']/Value"/>
<xsl:value-of select="."/>
</xsl:for-each>
Avatar billede mcole Nybegynder
01. september 2003 - 12:30 #9
Janegil: Jeg synes også at det er noget rod.
Et dårligt design. Jeg vil forsøge, at få lavet XML-skemaet om.
I første omgang virker dit svar dog efter hensigten.
Jeg takker mange gange og gir dig point.
Jeg vil da også gerne takke de andre, der har bidraget.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester