2014-06-18 62 views
1

我有一個包含不同語言的Unicode XML文件。我需要將文件中的所有非英文字母替換爲空格。這是該文件的一個例子。通過XSLT 1.0如何用空格替換所有非英文字母(字符)xslt

<NameValue> 
    <EntityName>Kai</EntityName> 
    <OriginalScriptName>住吉</OriginalScriptName> 
    <OriginalScriptName>すみかい</OriginalScriptName> 
    <OriginalScriptName>スシカイ</OriginalScriptName> 
</NameValue> 

預期結果

<NameValue> 
    <EntityName>Kai</EntityName> 
    <OriginalScriptName> </OriginalScriptName> 
    <OriginalScriptName> </OriginalScriptName> 
    <OriginalScriptName> </OriginalScriptName> 
</NameValue> 

XSLT我試過了。

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:my-scripts="urn:my-scripts" exclude-result-prefixes="msxsl"> 

    <xsl:output method="text"/> 

    <msxsl:script language="C#" implements-prefix="my-scripts"><![CDATA[ 
    public string fReplaceNonASCIICharacters(string inStr) 
    { 
     return Regex.Replace(inStr," ", @"[^\x20-\x7E]"); 
    } 
    ]]></msxsl:script> 

    <xsl:template match="OriginalScriptName"> 
     <xsl:value-of select="(my-scripts:fReplaceNonASCIICharacters(.))"/> 
    </xsl:template> 

</xsl:stylesheet> 
+0

你嘗試過什麼到目前爲止? –

+0

爲什麼您的示例將每個8個空格替換爲2個字符和4個字符?更重要的是,爲什麼你需要做這樣的替換呢?丟棄所有真實信息似乎毫無意義,但保留其原始大小。 –

+0

@ michael.hor257k多數民衆贊成在一個錯誤,你的權利只有1對1替換是必需的。因爲somettime的價值將凱姆斯像 Kai住スシイ我仍然需要「凱」... – user3724711

回答

3

基於伊恩的評論(假設我們可以讓spaces足夠長的時間,以涵蓋所有可能的輸入數據):

<xsl:variable name="ascii-letters" 
    select="'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'"/> 

<xsl:param name="spaces" select="'                    '"/> 

<xsl:template match="OriginalScriptName"> 
    <xsl:copy> 
    <xsl:variable name="non-ascii-letters" select="translate(., $ascii-letters, '')"/> 
    <xsl:value-of select="translate(., $non-ascii-letters, $spaces)"/> 
    </xsl:copy> 
</xsl:template> 
+1

替換字符串需要與translate(。,$ ascii-letters,'')'中的字符數一樣多的空格,否則只會用空格替換_first_非ASCII字符並刪除其他字符。 –

+0

除了Ian Roberts提到的問題外,這是一個不錯的解決方案。如果EXSLT函數'str:padding'可用,則可以使用'str:padding(string-length())'創建合適的替換字符串。 – nwellnhof

+0

@IanRoberts,你當然是對的,似乎我的XPath 1.0技能正在消失,我已經通過至少提供了一個空格參數和一些空格來糾正當前的代碼。 –

相關問題