Avatar billede flamsk Nybegynder
23. august 2005 - 21:13 Der er 10 kommentarer og
1 løsning

Hjælp til at udskrive xml dokument

hej jeg har lige 2 spørgsmål.

1. jeg har følgende xml dokument.

<Nodes>
    <Node>
        <directory>Animation</directory>
        <subdirectory>Anime</subdirectory>
        <subdirectory>Cartoons</subdirectory>
        <subdirectory>Movies</subdirectory>
        <subdirectory>Voice Actors</subdirectory>
        <subdirectory>Animation Companies</subdirectory>
    </Node>
</Nodes>

Hvordan udskriver jeg alle mine subdirectoies ?

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <xsl:for-each select="Nodes/Node">
  <xsl:value-of select="directory"/>
  <xsl:value-of select="subdirectory"/>
  </xsl:for-each>       
</xsl:template>
</xsl:stylesheet>

overstående udskriver bare AnimationAnime men jeg skal bruge alle sammen.

2. kan "Animation Companies" formateres til "animation-companies" altså til små bokstaver samt udskiftning af ' ' til '-'

Tak for hjælpen :)
Avatar billede softspot Forsker
23. august 2005 - 21:18 #1
1.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <xsl:for-each select="Nodes/Node">
    <xsl:value-of select="directory"/>
    <xsl:for-each select="subdirectory">
      <xsl:value-of select="."/>
    </xsl:for-each>       
  </xsl:for-each>       
</xsl:template>
</xsl:stylesheet>

2.
<xsl:value-of select="translate(.,'ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ ','abcdefghijklmnopqrstuvwxyzæøå-')" />
Avatar billede flamsk Nybegynder
23. august 2005 - 21:35 #2
kan man lave en funktion så man ikke skal skrive det hele tiden ? eller er der en smartere metode ?
Avatar billede softspot Forsker
23. august 2005 - 21:47 #3
Ja, man kan godt lave funktioner (eller en slags funktioner). Det hedder en template. Men lige i dette tilfælde er det nogenlunde ligeså hurtigt at skrive for-each løkken som det er at kalde en funktion/template.

Man kunn f.eks. lave denne template:

<xsl:template name="skriv-noder">
  <xsl:param name="item"/>
 
  <xsl:for-each select="$item">
    <xsl:value-of select="." />
  </xsl:for-each>
</xsl:template>

Den kan så kaldes således:

<xsl:call-template name="skriv-noder">
  <xsl:with-param name="item" select="'subdirectory'" />
</xsl:call-template>


Templaten skriver alle noder med det navn du angiver i parameteren item. BEMÆRK at datatypen af item er string og det er vigtigt for forventet funktionalitet, at du angiver den som en string (jf. eksemplet).
Avatar billede flamsk Nybegynder
24. august 2005 - 00:02 #4
det var nu mest til spørgsmål 2 jeg mente om man kunne lave en funktion ;)

Tak for hjælpen hidtil.
Avatar billede softspot Forsker
24. august 2005 - 00:11 #5
Nååh... giver vel egentlig også god mening at det var den du mente :)

Samme opskrift egentlig, nemlig en template som tager et element og oversætter de enkelte tegn. Således:

<xsl:template name="to-lower">
  <xsl:param name="item" select="." />
  <xsl:value-of select="translate($item,'ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ ','abcdefghijklmnopqrstuvwxyzæøå-')" />
</xsl:template>

Her er det værd at bemærke, at templaten skal kaldes med en node og ikke en string som det andet eksempel jeg viste tidligere...

Altså noget i stil med:

<xsl:call-template name="to-lower">
  <xsl:with-param name="item" select="." />
</xsl:call-template>

parameteren burde kunne undlades i ovenstående eksempel (da konteksten bevares med template-kald via call-template). Således:

<xsl:call-template name="to-lower" />

Men den kan altså også bruges hvis du vil kalde den på andre noder som ikke lige er i kontekst, f.eks.:

<xsl:call-template name="to-lower">
  <xsl:with-param name="item" select="/Nodes/Node/directory" />
</xsl:call-template>
Avatar billede flamsk Nybegynder
24. august 2005 - 00:24 #6
tak, så lige et sidste spørgsmål, så får du dine point :)

hvordan udskriver jeg speciel karaktere så som '>' og '<' hvis nu jeg gerne vil udskrive følgende streng via mit xslt script.

<% case "hejsa" %>
Avatar billede softspot Forsker
24. august 2005 - 00:29 #7
&lt; og &gt;

Det kan godt være du skal over i noget med:

<xsl:text disable-output-escaping="yes">&amp;gt;</xsl:text>

Jeg kan ikke helt huske om det er yes eller no man skal bruge, men det kan du nok lige selv hurtig teste ;)
Avatar billede flamsk Nybegynder
24. august 2005 - 00:33 #8
kanon tak for hjælpen :) send et svar så får du dine point.
Avatar billede softspot Forsker
24. august 2005 - 00:35 #9
Godt du kunne bruge det :)
Avatar billede softspot Forsker
24. august 2005 - 00:47 #10
...og tak for point :)
Avatar billede janegil Nybegynder
24. august 2005 - 10:00 #11
http://www.w3.org/TR/CSS21/text.html#propdef-text-transform i CSS synes jeg er mere elegant enn XPath translate()for å vise små bokstaver.
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