xsl: cómo dividir cadenas?

Quiero dividir una dirección en punto y coma ( ; ) en filas separadas por
:

por ejemplo, si la address es 123 Elm Street , quiero dar salida a 123 Elm Street ,

pero si la address es 123 Elm Street;PO Box 222 , quiero dar salida

 123 Elm Street
PO Box 222

y si la address es 123 Elm Street;PO Box 222;c/o James Jones , quiero dar salida

 123 Elm Street
PO Box 222
c/o James Jones

¿Hay alguna forma de hacer esto? (Probablemente fácil, pero no estoy tan familiarizado con XSLT)

El selector XSL simple es

  

y me gustaría modificar este fragmento XSLT para dividirlo en punto y coma.


actualización : Aparentemente, la respuesta implica el uso de y las funciones substring-before() y substring-after() .

Pero soy un principiante de XSLT y realmente podría usar algo de ayuda sobre cómo hacer esto.

I. Solución Plain XSLT 1.0:

Esta transformación :

       

cuando se aplica en este documento XML :

 123 Elm Street;PO Box 222;c/o James Jones 

produce el resultado buscado y corregido :

 123 Elm Street
PO Box 222
c/o James Jones

II. FXSL 1 (para XSLT 1.0):

Aquí solo usamos la plantilla FXSL str-map (y no tenemos que escribir plantilla recursiva por la 999ª vez):

                  

cuando esta transformación se aplica en cualquier documento XML (no utilizado), se produce el mismo resultado correcto deseado :

 123 Elm Street
PO Box 222
c/o James Jones

III. Usando XSLT 2.0

      

cuando se aplica esta transformación en este documento XML :

 123 Elm Street;PO Box 222;c/o James Jones 

el resultado deseado y correcto se produce :

 123 Elm Street
PO Box 222
c/o James Jones

Si su procesador XSLT admite EXSLT , puede usar str: tokenize ; de lo contrario, el enlace contiene una implementación que utiliza funciones como subserie-before.