Avatar billede mcole Nybegynder
20. februar 2002 - 16:14 Der er 6 kommentarer og
2 løsninger

Anvendelse af variable

Jeg har bl.a. denne variabel:
<xsl:variable name="TITEL">Forskriftens titel</xsl:variable>
...

<xsl:for-each select="Document/Field">
Document/Field har eksempelvis en attribut ID="TITEL"

Jeg vil gerne anvende denne @ID til at hente værdien af variablen med samme navn som værdien af @ID

Bemærk TITEL er kun et eksempel. Der er mange og jeg kender ikke på forhånd værdien af @ID
Avatar billede janegil Nybegynder
20. februar 2002 - 16:49 #1
<xsl:for-each select="Document/Field">
  <xsl:value-of select="${@ID}"></xsl:value-of>
</xsl:for-each>

...men jeg har ikke testet. Dette lar seg jo ikke gjøre i normale språk som Java og Fortran, men XSL/T er nå heller ikke noe 'normalt' språk, så kanskje?
Avatar billede mcole Nybegynder
20. februar 2002 - 17:30 #2
janegil >>
Tror det næsten er rigtigt.
Jeg får denne fejl:
Expected token 'NAME' found '{'. $-->{<--@ID}
Avatar billede mcole Nybegynder
20. februar 2002 - 17:35 #3
Min kode ser nu således ud:
<xsl:for-each select="Document/Field">
  <xsl:choose>
  <xsl:when test="@ID!='Styrdata'"> <!-- Any field but Styrdata -->
    <xsl:if test="."> <!-- Only if any data at all -->
      <DIV STYLE="background-color:gray; color:white; padding:2px; text-align:center">
        <xsl:value-of select="${@ID}"/>
      </DIV>
      <xsl:apply-templates select="."/>
    </xsl:if>
  </xsl:when>
  <xsl:otherwise/>
  </xsl:choose>
</xsl:for-each>
Avatar billede janegil Nybegynder
20. februar 2002 - 18:32 #4
Jeg tror egentlig du er på villspor, variable som du ikke kjenner navnet på, er litt langt hjemmefra.

Hvis du kan endre i XML'en, tror jeg det - i stedet for variable - skulle være noe som
<titler>
  <titel id="a">En titel</titel>
  <titel id="b">En titel til</titel>
</titler>
Det er en struktur som det er lettere å plukke bestemte verdier ut fra, når du ikke kjenner navnet på forhånd. (Og vanskeligere enn en variabel hvis du kjenner navnet, men det gjør du jo ikke.)
Avatar billede mcole Nybegynder
21. februar 2002 - 06:07 #5
Det er ikke sådan, at jeg ikke kender dem. Der er 20 forskellige som jeg så har defineret i variable. Det er blot ikke alle, der altid forekommer i XML dokumenterne (ca. 100.000).
jeg kunne selvfølgelig lave en choose og derefter 20 when. Det er blot en lidt kluntet løsning.
Jeg ville gerne, hvis en variant af "${@ID}" kunne komme til at virke.
Avatar billede Slettet bruger
22. februar 2002 - 16:41 #6
En løsning var at inkludere variablerne i bunden af XML-filerne istedet, f.eks:
<?xml ...?>
<RodElement>
  <Document />
  <Document />
  ...
  <Mapped-Variables>
      <variable name="TITEL">Forskriftens titel</variable>
      ...
  </Mapped-Variables>
</RodElement>

- det kan gøres inden transformeringen udføres i f.eks. ASP/PHP etc.

I dit XSLT skal du så istedet for:
  <xsl:value-of select="${@ID}"/>

gøre sådan:

  <xsl:value-of select="/Mapped-Variables/variable[@name=current()/@ID]" />

/CS
Avatar billede mcole Nybegynder
24. februar 2002 - 07:32 #7
Takker begge for jeres indsats!
Da begge løsningsmodeller er ens, og den jeg endeligt har valgt, fordeler jeg point imellem jer.
Hilsen Olé
Avatar billede mcole Nybegynder
24. februar 2002 - 07:33 #8
Takker begge for jeres indsats!
Da begge løsningsmodeller er ens, fordeler jeg point imellem jer.
Hlsen Olé
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