Avatar billede mailand Nybegynder
19. september 2005 - 00:03 Der er 23 kommentarer og
2 løsninger

Upper-case?

Hej

Jeg har et problem med at få upper-case xpath funktionen til at virke...

Jeg har tilføjet følgende i toppen af filen:
xmlns:xpath="http://www.w3.org/2005/02/xpath-functions"

- men det fejler hvis jeg fx. kører

<a href="#" title="{xpath:upper-case(@nodeName)}"></a>


Bevares - jeg er ikke nogen xslt haj, men jeg synes, ovenstående bør virke...?


- Andreas
Avatar billede atoft Nybegynder
19. september 2005 - 08:28 #1
kan du ikke bruge en translate(@nodeName,'abcde....','ABCDE.....')?
Avatar billede mailand Nybegynder
19. september 2005 - 08:41 #2
hmm. tjo, men det er lidt uhensigtsmæssigt...

det er et menuoutput fra et cms... hvis jeg skulle gøre det, så ville min fil blive uhensigtmæssigt stor - og når der nu er en funktion, jeg kan bruge direkte... :o)

- Andreas
Avatar billede krydset Nybegynder
19. september 2005 - 08:43 #3
hvad er xslt
Avatar billede mailand Nybegynder
19. september 2005 - 08:51 #4
xml stylesheets...

bruges til at formatere xml filer :o)
Avatar billede mailand Nybegynder
19. september 2005 - 09:00 #5
Tjek evt. www.w3schools.com og kig deres artikler og tutorials igennem. De giver en god intro til xml, xsl og xpath.

Nå... nogen, der kan svare på mit spm?
Avatar billede softspot Forsker
19. september 2005 - 10:30 #6
Jeg spekulerede på om du kunne klare det med noget inline script, men jeg er ikke helt klar over hvilken platform du kører på og om msxsl:script er en gangbar løsning.

Hvis det er kan du måske komme videre således:

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:user="urn:my-scripts">

  <msxsl:script language="JScript" implements-prefix="user">
    <![CDATA[
    function uppercase(r)
    {
      return r.toUpperCase();
    }
    ]]>
  </msxsl:script>

  <xsl:template match="*">
    <xsl:value-of select="user:uppercase(.)"/></p>
  </xsl:template>
</xsl:stylesheet>
Avatar billede mailand Nybegynder
19. september 2005 - 11:20 #7
jeg kan godt bruge scripts...

men jeg skal vel bruge et namespace at linke til - my-scripts har jeg som sagt ikke :)

- men ja, det undrer mig stadigvæk, jeg ikke bare kan linke direkte til xpath og bruge dens funktioner - det ville være væsentlig mere interessant...
Avatar billede softspot Forsker
19. september 2005 - 11:24 #8
Kan du få ovenstående til at fungere? xmlns:user er vel bare en sikkerhed for at funktionen ikke bliver mixet sammen med andre, du kunne i princippet kalde den moster-oda (eller master-yoda) for den sags skyld...
Avatar billede mailand Nybegynder
19. september 2005 - 11:37 #9
det fejler, når jeg inkluderer
  <msxsl:script language="JScript" implements-prefix="user">
    <![CDATA[
    function uppercase(r)
    {
      return r.toUpperCase();
    }
    ]]>
  </msxsl:script>
Avatar billede softspot Forsker
19. september 2005 - 11:48 #10
Prøv med denne modificerede version (med ekspliciit konvertering af node til string i kaldet til funktionen):

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:user="urn:my-scripts">

  <msxsl:script language="JScript" implements-prefix="user">
    <![CDATA[
    function uppercase(r)
    {
      return r.toUpperCase();
    }
    ]]>
  </msxsl:script>

  <xsl:template match="*">
    <xsl:value-of select="user:uppercase(string(.))"/></p>
  </xsl:template>
</xsl:stylesheet>
Avatar billede atoft Nybegynder
19. september 2005 - 20:17 #11
ja

translate(@nodeName,'abcdefghijklmnopqrstuvwyzxæøå','ABCDEFGHIJKLMNOPQRSTUVWYZXÆØÅ')

fylder ganske vist lidt mere, men jeg synes det er en pris som er værd at betale for at have et w3 compliant stylesheet, som kan afvikles af alle xslt-processorer.
Avatar billede softspot Forsker
19. september 2005 - 20:35 #12
Ja, hvis det er den fleksibilitet man har behov for :)
Avatar billede atoft Nybegynder
19. september 2005 - 21:37 #13
jo jo men jeg synes nu ikke


  <msxsl:script language="JScript" implements-prefix="user">
    <![CDATA[
    function uppercase(r)
    {
      return r.toUpperCase();
    }
    ]]>
  </msxsl:script>

fylder mindre ;-)
Avatar billede softspot Forsker
19. september 2005 - 21:41 #14
Kommer jo an på hvor ofte du skal bruge den...
Avatar billede softspot Forsker
19. september 2005 - 21:44 #15
Betragt flg. kode:

<xsl:value-of select="user:uppercase(string(.))"/>
<xsl:value-of select="user:uppercase(string(.))"/>
<xsl:value-of select="user:uppercase(string(.))"/>
<xsl:value-of select="user:uppercase(string(.))"/>
<xsl:value-of select="user:uppercase(string(.))"/>
<xsl:value-of select="user:uppercase(string(.))"/>


og flg. kode:

<xsl:value-of select="translate(@nodeName,'abcdefghijklmnopqrstuvwyzxæøå','ABCDEFGHIJKLMNOPQRSTUVWYZXÆØÅ')" />
<xsl:value-of select="translate(@nodeName,'abcdefghijklmnopqrstuvwyzxæøå','ABCDEFGHIJKLMNOPQRSTUVWYZXÆØÅ')" />
<xsl:value-of select="translate(@nodeName,'abcdefghijklmnopqrstuvwyzxæøå','ABCDEFGHIJKLMNOPQRSTUVWYZXÆØÅ')" />
<xsl:value-of select="translate(@nodeName,'abcdefghijklmnopqrstuvwyzxæøå','ABCDEFGHIJKLMNOPQRSTUVWYZXÆØÅ')" />
<xsl:value-of select="translate(@nodeName,'abcdefghijklmnopqrstuvwyzxæøå','ABCDEFGHIJKLMNOPQRSTUVWYZXÆØÅ')" />
<xsl:value-of select="translate(@nodeName,'abcdefghijklmnopqrstuvwyzxæøå','ABCDEFGHIJKLMNOPQRSTUVWYZXÆØÅ')" />

og fortæl mig hvilken en af de to du synes

1. er lettest at overskue
2. er lettest at skrive

:)
Avatar billede atoft Nybegynder
19. september 2005 - 21:45 #16
Nej for man laver jo en template som du også gør.

Så i stedet for.

<xsl:template match="*">
    <xsl:value-of select="user:uppercase(string(.))"/></p>
</xsl:template>

bliver det jo bare

<xsl:template match="*">
    <xsl:value-of select="translate(@.,'abcdefghijklmnopqrstuvwyzxæøå','ABCDEFGHIJKLMNOPQRSTUVWYZXÆØÅ')"/>
  </xsl:template>
Avatar billede softspot Forsker
19. september 2005 - 22:17 #17
Men du skal vel stadig angive en parameter til kaldet (som jeg i øvrigt ville lave til en named template). Således:

<xsl:template name="upper-case">
  <xsl:param name="item" select="." />
  <xsl:value-of select="translate($item,'abcdefghijklmnopqrstuvwyzxæøå','ABCDEFGHIJKLMNOPQRSTUVWYZXÆØÅ')"/>
</xsl:template>

i bedste fald skal den kaldes således:

<xsl:call-template name="upper-case" />

men hvis jeg ønsker at ændre det element jeg vil konvertere, så skal jeg til at kalde den således:

<xsl:call-template name="upper-case">
  <xsl:with-param name="item" select="../test" />
</xsl:call-template>

hvilket jo snart bliver endnu værre end bare at skrive translate direkte...

Jeg synes stadig scriptversionen er mere fleksibel.
Avatar billede atoft Nybegynder
19. september 2005 - 22:34 #18
Jeg er enig i at script version er mere enkel og kan bruges i forbindelse med {} her vil mit template forslag kræve at man laver <xsl:attribute>.

Men om den er mere fleksibel kommer vel an på hvorledes man definerer fleksibel. Er det fleksibel at lave et stylesheet som kun kan anvendes i forbildelse med MSXML?


I øvrigt kunne man lave en

xsl:template med mode attribute i stedet for xsl:call-template, så vil parametre overførslen ikke være som komples.
Avatar billede softspot Forsker
19. september 2005 - 22:42 #19
Fair nok. Principielt kan vi godt blive enige om at det er bedre at binde sig så lidt som muligt til en bestemt platform, men på den anden side, må man også overveje hvor meget man vil ofre på den konto frem for andre egenskaber, hvis man ved det er en MSXML det kommer til at køre på...

Jeg tror jeg vil trækker mig ud af denne diskussion, om ikke andet indtil mailand melder sig på banen... :)
Avatar billede atoft Nybegynder
19. september 2005 - 22:46 #20
Ja man må sige han har fået noget fordi 30 points :-)
Avatar billede mailand Nybegynder
19. september 2005 - 23:32 #21
hehe. mange tak for jeres svar... jeg er endt med at bruge translate, men kan i ikke smide et nyt svar hver, så deler jeg point...

- Andreas
Avatar billede softspot Forsker
19. september 2005 - 23:36 #22
Jo, det får du da lige her :)
Avatar billede atoft Nybegynder
20. september 2005 - 08:21 #23
Jo da og mellem os. Så har du valgt den rigtige løsninge ;-)
Avatar billede mailand Nybegynder
20. september 2005 - 09:06 #24
hehe - jeg takker for hjælpen :-)
Avatar billede softspot Forsker
20. september 2005 - 10:39 #25
Tak for point :)
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

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