2016-08-26 9 views
3

Ich habe eine Probe xsl wie diese,XSLT - REGEX Zeichen ersetzen

<doc> 
    <para>text . . .text</para> 
    <para>text . . .text. . . . . .text</para> 
</doc> 

Wie Sie einige Muster gibt es in der XML wie . . . sehen kann, was ich brauche ersetzen Raum existieren zwischen den Punkten mit * ist. So sollte eine Ausgabe wie folgt aussehen werden,

<doc> 
    <para>text .*.*.text</para> 
    <para>text .*.*.text.*.*.*.*.*.text</para> 
</doc> 

ich folgende Xslt dafür geschrieben haben,

<xsl:template match="text()"> 
     <xsl:analyze-string select="." regex="(\.)(&#x0020;)(\.)"> 
      <xsl:matching-substring> 
       <xsl:value-of select="replace(.,regex-group(2),'*')"/> 
      </xsl:matching-substring> 
      <xsl:non-matching-substring> 
       <xsl:value-of select="."/> 
      </xsl:non-matching-substring> 
     </xsl:analyze-string> 
    </xsl:template> 

aber jeden anderen Raum beseitigen und geben Sie mir folgende Ergebnis

<doc> 
    <para>text .*. .text</para> 
    <para>text .*. .text.*. .*. .*.text</para> 
</doc> 

Wie kann ich mein XSLT ändern, um korrekte Ausgabe zu erhalten.

Antwort

2

Ich denke

<xsl:template match="text()"> 
    <xsl:analyze-string select="." regex="(\.)()(\.)(\.)*"> 
     <xsl:matching-substring> 
      <xsl:value-of select="replace(., ' ','*')"/> 
     </xsl:matching-substring> 
     <xsl:non-matching-substring> 
      <xsl:value-of select="."/> 
     </xsl:non-matching-substring> 
    </xsl:analyze-string> 
</xsl:template> 

erledigt den Job. Wie LukStorms hervorhebt, kann dies vereinfacht werden zu

<xsl:template match="text()"> 
    <xsl:analyze-string select="." regex="\.(\.)+"> 
     <xsl:matching-substring> 
      <xsl:value-of select="replace(., ' ','*')"/> 
     </xsl:matching-substring> 
     <xsl:non-matching-substring> 
      <xsl:value-of select="."/> 
     </xsl:non-matching-substring> 
    </xsl:analyze-string> 
</xsl:template> 
+0

Nizza. :) Und ich denke, die Regex kann zu "\. (\.) +" ' – LukStorms

+0

@LukStorms vereinfacht werden, Sie haben Recht, ich habe Ihren Vorschlag hinzugefügt. –

+0

Ich nehme an, das sind Ellipse-Punkte, minimal drei Punkte müssen. (\.)() (\.) (\.) * nach (\.)() (\.) (\.) + ist in Ordnung. Text. .text sollte nicht * dazwischen kommen. –