Avatar billede winston-smith Nybegynder
23. januar 2003 - 13:22 Der er 4 kommentarer

Fixed length transformationer

Jeg har en XML fil der skal omformes til en Fixed-length output fil. E.g.
<testin @arg1="heste" @arg2="grise" @arg4="får"/>
--> TESTOUT hest gris XXXX fårX

Jeg tænkte på en måde det kan gøres med string funktionerne i XSLT, men kan ikke lige greje det??

Så nu har jeg lige puttet et længere program sammen for at håndtere det, men er der virkelig ikke en lettere måde?

<xsl:call-template name="size">
<xsl:with-param name="value">slam</xsl:with-param>
<xsl:with-param name="size">6</xsl:with-param>
</xsl:call-template>

<xsl:template name="size">
    <xsl:param name="value"></xsl:param>
    <xsl:param name="size">0</xsl:param>
    <xsl:value-of select="substring(concat($value, 'XXXXXXXXXXXXXXXXXXXXXXX'), 1, $size)" />
</xsl:template>

Programmet fungere heller ikke når der skal tages højde for manglende argumenter (arg3).
Avatar billede Slettet bruger
23. januar 2003 - 14:00 #1
Du kunne jo prøve sådan her - det er næsten det samme, men logikken ligger i en match'ende template, og den regner selv længden ud...

<xsl:variable name="theXes">XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</xsl:variable>
...
<xsl:apply-templates select="@arg1 | @arg2 | @arg4" />
...
<xsl:template match="@arg1 | @arg2 | @arg4">
  <xsl:value-of select="substring($theXes, 1, string-length(.))" />
</xsl:template>

/CS
Avatar billede janegil Nybegynder
23. januar 2003 - 14:17 #2
Hvis du bruker xsl:param til argumentene, så vil jo ingen av dem mangle, alle har en standardverdi, som typisk vil være en tom streng.

Mern jeg er redd du har rett i at det er litt tynt med strengefunksjoner i XSLT; dog, det er nok XPATH-dokumentasjonen du skal lete i: http://www.w3.org/TR/xpath#section-String-Functions
Avatar billede winston-smith Nybegynder
23. januar 2003 - 15:46 #3
Problemet var ikke at erstatte med X'er, men at pad'de op med x'er så strengen altid bliver en bestemt længde. Følgende ændringer gør vist det, hvis længded er 5, men stadig meget kompliceret for et operation som burde være lige det XSLT er designet til:

<xsl:variable name="theXes">XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</xsl:variable>

<xsl:apply-templates select="@arg1 | @arg2" />

<xsl:template match="@arg1 | @arg2">
  <xsl:value-of select="concat(substring(., 1, 5), substring($theXes, 1, 5 - string-length(.)))" />
</xsl:template>
Avatar billede janegil Nybegynder
23. januar 2003 - 16:32 #4
<xsl:template match="testin">
    <xsl:value-of select="substring(concat(@arg1,' ',@arg2,' ',@arg3,' ',@arg4,'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'),1,20)"></xsl:value-of>
</xsl:template>
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