---
title: "XSLT padding"
type: "forum-thread"
url: "https://www.webforum.nu/amne/xml/185252-xslt-padding/page2"
topic: "XML"
topic_url: "https://www.webforum.nu/amne/xml"
author: "newberg"
published: "2010-11-15T12:46:59.000Z"
updated: "2010-11-30T10:50:17.000Z"
replies: 63
views: 3904
page: 2
pages: 4
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/xml/185252-xslt-padding"
---

# XSLT padding

_Sida 2 av 4._

## #21 — newberg, 2010-11-18T10:16Z

En fråga bara.

Det kommer komma in en lång sträng som kommer att kunna vara av olika längd.
Ex. ibland 16 tecken och ibland 23 tecken osv.

Kan jag ens stycka strängen när tecknet för styckningen kommer att variera från gång till gång. Då måste man väl in och hårdkoda på varje enskild sträng?

Permalänk: https://www.webforum.nu/p/2259865

## #22 — SPiN, 2010-11-18T10:25Z

Kan du ge två exempel på hur strängar kan se ut och hur dom ska se ut efter formateringen? Frågan är om din modell är korrekt om du inte riktigt vet vilket tecken som är avgränsare? Eller är det en längd som agerar avgränsare?

Permalänk: https://www.webforum.nu/p/2259866

## #23 — newberg, 2010-11-18T11:23Z

En inkommande sträng ser ut så här: XXXXXXXXXXXXXXXX
denna långa sträng ska sedan styckas pga av att den innehåller olika information på olika platser.
MEN, det jobbiga är att en viss typ av info kan ha olika längd. Ibland är info1 mellan tecken 1-3 och ibland mellan 1-5.

Det är även därför jag ska padda. För att fylla upp dessa strängar till dess maxlängd.
Tyvärr finns ingen bra delimiter heller, då tex. info1 som består av ett numeriskt värde följs av info2 som också består av ett numeriskt värde.

Permalänk: https://www.webforum.nu/p/2259871

## #24 — SPiN, 2010-11-18T11:47Z

Om det inte finns någon avgränsare mellan info 1 och info 2, som tillsammans bildar strängen "123456789" (123 är info 1 och 456789 är info 2) är det omöjligt att formatera strängen (till och med för den mänskliga hjärnan). Det måste alltså finnas något som avgränsar info 1 från info 2.

Permalänk: https://www.webforum.nu/p/2259874

## #25 — newberg, 2010-11-18T11:56Z

Du har rätt. Det finns delimiters, av alla dess olika slag. Kan vara mellanslag, ny rad, / - tecken osv. Så jag måste alltså på något sätt först stycka strängen ända fram till delimitern och sedan padda. Dessutom ska vissa strängar styckas på flera ställen.
några idéer?

Permalänk: https://www.webforum.nu/p/2259875

## #26 — SPiN, 2010-11-18T12:21Z

Byt ut alla möjliga avgränsare till en och samma ([här är ett exempel på en replace()-funktion för XSLT 1.0](http://geekswithblogs.net/Erik/archive/2008/04/01/120915.aspx)).

Efter det får du splitta upp strängen på varje avgränsare ([här är ett exempel på split() för XSLT 1.0](http://www.abbeyworkshop.com/howto/xslt/xslt-split-values/index.html)) och efter det köra dina paddnings-funktioner.

Permalänk: https://www.webforum.nu/p/2259877

## #27 — newberg, 2010-11-18T13:10Z

Du ska ha stort tack för allt du hjälp mig med(hittills) :)

Dessa funktioner är egentligen bara plug-n-play förutom att jag får sätta in mina variablenamn och avgränsare osv?

Permalänk: https://www.webforum.nu/p/2259880

## #28 — SPiN, 2010-11-18T13:21Z

> **[newberg skrev:](https://www.webforum.nu/p/1523162)**
>
> Du ska ha stort tack för allt du hjälp mig med(hittills) :)

Så lite så!

> **[newberg skrev:](https://www.webforum.nu/p/1523162)**
>
> Dessa funktioner är egentligen bara plug-n-play förutom att jag får sätta in mina variablenamn och avgränsare osv?

Nja, till viss del. Det kan bli lite knep och knåp för att få det att lira såklart, men dom är generella och bör fungera out-of-the-box. Ett tips är att integrera dina padding-funktioner som templates också, och göra ytterligare en template som sköter replace/split/padding i ett svep.

Permalänk: https://www.webforum.nu/p/2259881

## #29 — newberg, 2010-11-18T13:22Z

Okej, jag provar! Återkommer med resultat...

Permalänk: https://www.webforum.nu/p/2259882

## #30 — newberg, 2010-11-18T14:22Z

Medan jag trixar med ovanstående så tänkte jag att jag slänger fram det sista problemet som ska åtgärdas:

Det är så att emellanåt så kommer det komma in en drös med strängar som ligger varannan string1 och varannan string2.

I dagsläget så kör jag for-each loopar som skriver ut samtliga string1 och samtliga string2.

resultatet blir att först hamnar alla string1 efter varann och därefter alla sträng2.
Problemet är att strängarna är beroende av varann. Så string1 måste följas av string2 för att det ska bli korrekt.

Idag: 
1,1,1,1,1,1,1
        2,2,2,2,2,2,2

Som jag vill ha det: 1,2,1,2,1,2,1,2,1,2

Några ideer?

Permalänk: https://www.webforum.nu/p/2259888

## #31 — newberg, 2010-11-19T08:13Z

Har försökt med en string-join function enligt nedan.

```
<xsl:value-of select="string-join(Vägen/till/String1,Vägen/till/string2,' ')"/>
```

Men får det inte att fungera tyvärr.
Är det en bra väg att gå med string-join eller finns det ett bättre alternativ?

Permalänk: https://www.webforum.nu/p/2259932

## #32 — SPiN, 2010-11-19T08:27Z

string-join() är specad i XSLT 2.0, inte 1.0 vilket de flesta parsers använder -- tyvärr.

Har du bara två värden som ska slås ihop, kan du ju använda

```
<xsl:value-of select="concat(Vägen/Till/String1, ' ', Vägen/Till/String2)" />
```

Annars får du nästla en massa concat()s (eller skapa en template som gör det åt dig).

Permalänk: https://www.webforum.nu/p/2259933

## #33 — newberg, 2010-11-19T08:42Z

Jag tror det borde funka. Men, kan jag använda 'ny rad' som avgränsare?
provade att trycka enter mellan ' ', men det verkade inte funka. Kan man skriva 'ny rad' på samma sätt som man skriver mellanslag så här: &#160 ;

Permalänk: https://www.webforum.nu/p/2259936

## #34 — SPiN, 2010-11-19T09:03Z

Det kallas för entiteter, och jag har för mig att newline's entitet är &#xa;

Permalänk: https://www.webforum.nu/p/2259943

## #35 — newberg, 2010-11-19T09:21Z

'&#13 ;' funkade för mig! Tack än en gång Spin!

Permalänk: https://www.webforum.nu/p/2259948

## #36 — newberg, 2010-11-19T10:23Z

Kan man inte göra concat i en for-each loop?

```
<xsl:for-each select="concat(väg/till/string1, '&#13 ;', väg/till/string2)"/>
```

Denna kod funkar om man kör value-of, men ändrar jag till for-each så skiter det sig.

Permalänk: https://www.webforum.nu/p/2259957

## #37 — SPiN, 2010-11-19T10:32Z

Nej, det blir omöjligt då en for-each ska loopa igenom ett elements barn-noder, och inte strängar. Du kan ju däremot göra strängmanipuleringen inuti for-each-loopen, antingen sätta den till en variabel eller skriva ut den.

Permalänk: https://www.webforum.nu/p/2259959

## #38 — newberg, 2010-11-19T10:42Z

Provade följande utan lycka:

```
<xsl:for-each select="vägen/till">
<xsl:value-of select="concat(String1, '&#13 ;', String2)"/> 
</xsl:for-each>
```

Men kanske är något på spåren?

Permalänk: https://www.webforum.nu/p/2259960

## #39 — SPiN, 2010-11-19T10:46Z

Vad fungerar inte? Koden är nämligen inget fel på. Tänk dock på att även en ren radbrytning inte visas i webläsaren, om du inte har ett fixed-width element utanför (som t.ex. \<pre\>). Vill du att det ska bli en radbrytning i html är det ju taggen \<br\> som du ska använda.

Permalänk: https://www.webforum.nu/p/2259961

## #40 — newberg, 2010-11-19T11:38Z

Den skriver enbart ut newlines.

Permalänk: https://www.webforum.nu/p/2259973

---

Tråden på webben: https://www.webforum.nu/amne/xml/185252-xslt-padding/page2  
Föregående sida: https://www.webforum.nu/amne/xml/185252-xslt-padding.md  
Nästa sida: https://www.webforum.nu/amne/xml/185252-xslt-padding/page3.md
