Liste nach Kommas splitten

okah

Grünschnabel
Hallo,

ich habe folgende Liste in xml:
('tom (a)','jan (b)','uli','oli (b,c)')

und will nach der transformation folgendes Ergebnis bekommen:

<Y Type="en">
<x disp="tom (a)"/>
<x disp="jan (b)"/>
<x disp="uli"/>
<x disp="oli (b,c)"/>
</Y>

Mein Code sieht so aus:
<xsl:choose>
<xsl:variable name="str" select="tokenize(translate(replace(substring-after(normalize-space(.), '('), '\)+$', ''), &quot;'&quot;, ''), ',')"/>
<Y Type="en">
<xsl:for-each select="$str">
<x>
<xsl:attribute name="disp" select="." />
</x>
</xsl:for-each>
</Y>
</xsl:choose>


bekomme aber das Ergebnis:
<Y Type="en">
<x disp="tom (a)"/>
<x disp="jan (b)"/>
<x disp="uli"/>
<x disp="oli (b"/>
<x disp="c)"/>
</Y>
in mein Code habe ich die Rundeklammern am Anfang und Ende entfernt dann mit der Funktion translate die Hochkommas ersetzt.
die Liste sieht dann so aus: tom (a),jan (b),uli,oli (b,c)

ab hier habe ich ein Problem. Wie kann ich die Liste nach Kommas splitten ohne dass das letzte Komma in Klammern berücksichtigt wird?

vielen Dank für Eure Hilfe
Gruß
 

okah

Grünschnabel
hallo,

das funktioniert super! vielen Dank für die Hilfe.
könntest Du mir bitte kurz beschreiben was das tokenize(., &quot;\('|','|'\)&quot;) genau macht.?
tokenize nach (' oder , oder ') ist das so zu verstehen?

Gruß
 

deepthroat

Erfahrenes Mitglied
Hi.
hallo,

das funktioniert super! vielen Dank für die Hilfe.
könntest Du mir bitte kurz beschreiben was das tokenize(., &quot;\('|','|'\)&quot;) genau macht.?
tokenize nach (' oder , oder ') ist das so zu verstehen?
Ja, prinzipiell schon. Der Text wird in seine Token an jeder Stelle die entweder mit (' oder ',' oder ') übereinstimmt zerlegt. Das Muster ist halt ein regulärer Ausdruck dafür.

Gruß