2017-10-04 8 views
-1

私はこのXSLTを作成しましたが、非ASCII文字を削除するだけです。XSLTはスペースで非asciiを置き換えます

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

<xsl:param name="charset" select="'@.1234567890 abcdefghilmnopqrstuvwzkyx ABCDEFGHILMNOPQRSTUVWZYKX'" /> 

<xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="text()"> 
    <xsl:value-of select="translate(., translate(., $charset, ''), '')"/> 
</xsl:template> 

</xsl:stylesheet> 

私は単純なスペースで置き換えたいと思います。 手掛かりはありますか?

+0

調整しようとしている文字列に最大の長さがありますか? –

+0

はい最大150文字です。 –

答えて

1

置き換えられるテキストの最大長がある場合は、150スペースからなる変数を定義して、それを変換式で使用できます。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

    <xsl:strip-space elements="*"/> 

    <xsl:param name="charset" select="'@.1234567890 abcdefghilmnopqrstuvwzkyx ABCDEFGHILMNOPQRSTUVWZYKX'" /> 
    <!-- 150 spaces --> 
    <xsl:param name="spaces" select="'                                      '" /> 

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="text()"> 
     <xsl:value-of select="translate(., translate(., $charset, ''), $spaces)"/> 
    </xsl:template> 
</xsl:stylesheet> 

あなたがXSLT 2.0を使用することができれば、あなたは正規表現を可能にしreplace機能を、使用することができます。

+0

ちょうど完璧!おかげさまで、私はもうしばらく私の頭を叩いていました。 –