2017-01-26 4 views
0

Ich möchte unter Komma getrennte Liste zu unter Ausgabe basierend auf ungerade und gerade Position durch XSLT konvertieren.XSLT Transformation basierend auf ungeraden und geraden

Eingang -

field1,value1,field2,value2,field3,value3 

Output-

<root> 
<field1>value1</field1> 
<field2>value2</field2> 
<field3>value3</field3> 
</root> 

Vielen Dank im Voraus.

Grüße Nilay

+0

Welchen XSLT-Prozessor bzw. welche XSLT-Version verwenden Sie/können Sie verwenden? Es ist leicht lösbar in XSLT 2.0 mit 'tokenize ('Feld1, Wert1, Feld2, Wert2, Feld3, Wert3', ',') [Position() Mod 2 = 0]'. –

+0

XSLT 1.0 Prozessor – Nilay

+0

Welcher XSLT 1.0 Prozessor? Haben Sie Unterstützung für http://exslt.org/str/functions/tokenize/index.html? –

Antwort

0

Sie eine rekursive Template-Funktionen aufrufen, ohne Erweiterung verwenden könnten ...

XSLT 1,0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 
    <xsl:strip-space elements="*"/> 

    <xsl:param name="input" select="'field1,value1,field2,value2,field3,value3'"/> 

    <xsl:template match="/"> 
    <root> 
     <xsl:call-template name="process"> 
     <xsl:with-param name="toProcess" select="$input"/> 
     </xsl:call-template> 
    </root> 
    </xsl:template> 

    <xsl:template name="process"> 
    <xsl:param name="toProcess"/> 
    <xsl:variable name="name" select="normalize-space(substring-before($toProcess,','))"/> 
    <xsl:variable name="value" select="normalize-space(substring-before(
     concat(substring-after($toProcess,','),',') 
     ,','))"/> 
    <xsl:variable name="remaining" select="substring-after(
     substring-after($toProcess,',') 
     ,',')"/> 
    <xsl:element name="{$name}"> 
     <xsl:value-of select="$value"/> 
    </xsl:element> 
    <xsl:if test="string($remaining)"> 
     <xsl:call-template name="process"> 
     <xsl:with-param name="toProcess" select="$remaining"/> 
     </xsl:call-template> 
    </xsl:if> 
    </xsl:template> 

</xsl:stylesheet> 

Output (mit einem beliebigen wohlgeformte XML Eingabe.)

<root> 
    <field1>value1</field1> 
    <field2>value2</field2> 
    <field3>value3</field3> 
</root> 
+0

Vielen Dank für die Antwort. – Nilay

Verwandte Themen