2012-04-16 50 views
1

我試圖想出替代的特殊字符,如A,U,U等與在BizTalk他們的基本字母表中的一個好辦法。目前我使用的是以下XSL格式:用.Net/XSL中的常規字母替換特殊字符?

<xsl:template match="text()"> 
    <xsl:call-template name="ReplaceChars"> 
     <xsl:with-param name="Input" select="."></xsl:with-param> 
    </xsl:call-template> 
</xsl:template> 

<xsl:variable name="OddChars">ÄÖÅÜÉäöåüé</xsl:variable> 
<xsl:variable name="RegChars">AOAUEaoaue</xsl:variable> 

<!-- Replaces odd characters with regular ones --> 
<xsl:template name="ReplaceChars"> 
    <xsl:param name="Input" /> 
    <xsl:value-of select="translate($Input, $OddChars, $RegChars)"/> 
</xsl:template> 

以上工作正常。我的問題是:有沒有更好的或「更聰明」的方式來做到這一點?我找不到任何合理的谷歌。我正在考慮使用.Net內聯代碼來簡單地強制文本上的其他文化,以自動從基本字符中去除特殊符號。但我似乎無法得到那個工作。

基本上,我不希望創建一個應用程序,你就必須不斷地更新角色一覽表和風險,並非定義,打通與接收應用程序導致錯誤一個新的特殊字符。但我有選擇嗎?

+0

你可以考慮使用'msxsl:script'來嵌入C#或VB代碼來實現一個擴展函數,代碼如http://stackoverflow.com/questions/3769457/how-can-i-remove-accents-on -a串。但這一切都取決於您的需求或您對「特殊字符」及其替代品的定義是否與該答案中使用的定義相符。 – 2012-04-16 10:42:16

+0

沒有一個「更聰明的辦法」,因爲你沒有提供一個什麼樣的「特殊字符」是,也不應該如何產生其更換的定義。事實上,不同的語言可能會有不同的規則來替換相同的字符,正如@msam指出的那樣。讓代碼更加靈活的一種方法是將所有「特殊字符」的集合及其相應的「替換」放入單獨的XML文件中。這樣代碼將永遠不需要修改。 – 2012-04-16 12:26:32

回答

2

另一種選擇是使用正則表達式來代替你想要的字符。

更重要的是你一定要明白這樣可能會導致正確的一些混亂的是字符映射?例如,日耳曼語言將ä變爲ae,ü變爲ue,ö變爲oe,映射到a,u和o會改變某些詞的含義。

+0

是的,我知道缺點,源系統和目標系統不在我的控制之下。此外,還有一些約束檢查,例如字符串長度等,這些約束檢查在源系統上進行決定和檢查,因此使用可以用ae代替ä的解決方案可能會產生錯誤,因此也不是一種選擇。不過,謝謝你的迴應。 :) – Kahn 2012-04-17 10:37:44

0

我的問題是:有沒有更好的或「更聰明」的方式來做到這一點?

...

基本上,我不希望創建一個應用程序,你不得不 不斷更新角色一覽表和風險,並非定義一個新的特殊字符 ,通過獲取和導致接收應用程序的 錯誤。但我有選擇嗎?

沒有一個「更聰明的辦法」,因爲你沒有提供一個什麼樣的「特殊字符」是一個定義,也沒有其更換應如何產生

事實上,不同的語言可能會有不同的規則來替換相同的字符,正如@msam指出的那樣。使此代碼更靈活

一種方式是集合的所有「特殊字符」及其相應的「替代品」放到一個單獨的XML文件。這樣代碼將永遠不需要修改。