2017-10-04 3 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 개의 공백으로 구성된 변수를 정의하고이를 변환 식에 사용하면됩니다. 당신은 XSLT 2.0을 사용할 수있는 경우

<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> 

, 당신은 정규 표현식을 허용 replace 기능을 사용할 수 있습니다.

+0

그냥 완벽! 고마워, 나는 잠시 동안 내 머리를 두드렸다. –