string verknüpfung in xsl

shockshell

Erfahrenes Mitglied
Hi,

ich habe folgendes Problem:

Während einer XSL Transformation muss ich innerhalb einer Schleife Texte verschiedener Entities (keine Attribute) zu einem großen Text zusammenfassen (concat) um diese dann an anderer Stelle, nach dieser Schleife auszugeben.

<xsl:for-each....>
.....
<hier die Strings zusammenfügen string+=string>
.....
</xsl:for-each>

<xsl:value-of select="zusammengefügter String">

Wie kann ich das erreichen? Ich habe es mit einer "variablen" probiert, bin aber daran gescheitert, dass eine Variable nicht "variabel" ist. Evtl. kann man das mit Javascript lösen. Nur habe ich noch nie Javascript in XSL verwendet.

Würde mich freuen, wenn jemand ein paar Tips hätte.

Marcus.
 
das kannst du m.m.n. schon mit variablen erreichen, oder auch mit parametern... allerdings ist dein codefragment nicht ausreichend, um eine lösung zu schreiben...
poste mal das xml und das xsl, oder wenigstens einen link.
 
Ich hab sowas mal verwendet:

Code:
<xsl:variable name="list">
  <xsl:for-each select="//whatever">           
    <xsl:value-of select="concat('[',concat(.,']'))" />
  </xsl:for-each>
</xsl:variable>

Es erzeugt eine Stringvariable namens list, die die Werte aller Knoten 'whatever' in eckigen Klammern enthält.
 
Also meine XSLT sieht bisher folgendermaßen aus:

Code:
<xsl:for-each select="/ORDERS03/IDOC/E1EDP01">
    <Artikel>
        <xsl:for-each select="E1EDP19">
            <xsl:if test="QUALF = '002'">
                <xsl:attribute name="Artnr">
                        <xsl:value-of select="IDTNR"/>
                </xsl:attribute>
            </xsl:if>
        </xsl:for-each>
        <xsl:attribute name="Anzahl">
            <xsl:value-of select="number(MENGE)"/>
        </xsl:attribute>
        <HIER SOLL DER STRING ZUSAMMENGEFÜGT WERDEN IN DER FORM
concat(E1EDP19/IDTNR,': ',E1EDPT1/E1EDPT2/TDLINE))>
    </Artikel>
</xsl:for-each>

<xsl:if test="STRING NICHT LEER">
    <Bemerkung><xsl:value-of select="STRING AUSGEBEN" /></Bemerkung>
</xsl:if>

Das komplette XML zu posten würde hier den Rahmen sprengen.
 
Zuletzt bearbeitet:
Danke für eure Antworten. Ich habe es jetzt soweit, dass ich nur noch das \n in eine neue Zeile umsetzen brauche.

<xsl:variable name="bemerkung">
<xsl:for-each select="/ORDERS03/IDOC/E1EDP01">
<xsl:value-of select="concat(E1EDP19/IDTNR,': ',E1EDPT1/E1EDPT2/TDLINE,'\n')" />
</xsl:for-each>
</xsl:variable>

<xsl:if test="$bemerkung != ''">
<Bemerkung><xsl:value-of select="$bemerkung" /></Bemerkung>
</xsl:if>
 
War das eine Frage? :) Kommt drauf an, welches Format zu erstellst. Wenn du deine Daten in ein HTML File schreibst, dann steht <br> für nen Zeilenumbruch.
 
Ups, sorry :)

Ja, das war eine Frage.
Wie bekomme ich ein "wahres" newline in meine Ausgabe. Wenn ich es so wie oben benutze steht da nur text1 \n text2. Es soll aber:
text1
text2

dort stehen.

Marcus.
 
Habs gefunden, obwohl ich jetzt nicht weiß, ob das so ganz korrekt ist:


<xsl:value-of select="concat(E1EDP19/IDTNR,': ',E1EDPT1/E1EDPT2/TDLINE,'&#10;')" disable-output-escaping="yes" />

Jedenfalls habe ich jetzt jeden Text in einer einzelnen Zeile.

Marcus
 
Zuletzt bearbeitet:
Zurück