2012-04-16 77 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文件。这样代码将永远不需要修改。