2016-11-08 2 views
0

Ich habe eine xml wie diese,XSLT - Split-String mit spezifischem Charakter

<doc> 
    <para>A brief 23 spell* of hea#vy rain* forc^%ed an early+ lunch* [email protected] nine</para> 
</doc> 

Ich brauche die Textzeichenfolge von jedem * in dem Text ..

SO erwartet ausgegeben werden soll brechen,

<doc> 
    <para>A brief 23 spell</para> 
    <para>of hea#vy rain</para> 
    <para>forc^%ed an early+ lunch</para> 
    <para>[email protected] nine</para> 
</doc> 

ich geschrieben habe folgende Logik für das,

ich habe folgende xslt geschrieben fo r das,

<xsl:template match="para"> 
     <xsl:analyze-string select="text()" regex="[A-Za-z0-9_.]\*"> 
      <xsl:matching-substring> 
       <para> 
        <xsl:value-of select="."/> 
       </para> 
      </xsl:matching-substring> 
     </xsl:analyze-string> 
    </xsl:template> 

Kann mir jemand vorschlagen, wie kann ich das mit xslt tun?

Antwort

1

Persönliche Vorlieben würde ich mit der Funktion geht tokenize():

Zusammenfassung: Diese Funktion unterbricht die $ Eingabezeichenfolge in eine Folge von Strings, jeden Teil Behandlung, die $ Muster als Trennzeichen übereinstimmt. Die Separatoren selbst werden nicht zurückgegeben.

<xsl:template match="para"> 
    <xsl:for-each select="tokenize(.,'\*')"> 
    <para> 
     <xsl:sequence select="."/> 
    </para> 
    </xsl:for-each> 
</xsl:template> 

ergibt:

<para>A brief 23 spell</para> 
<para> of hea#vy rain</para> 
<para> forc^%ed an early+ lunch</para> 
<para> [email protected] nine</para> 

Um Streifen die vorderen und hinteren Leerzeichen verwenden:

<xsl:sequence select="normalize-space(.)"/> 
Verwandte Themen