1

我正在尝试想出一个很好的方法来用 BizTalk 中的基本字母替换特殊字符,如 ã、û、ü 等。目前我正在使用以下 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 内联代码来简单地在文本上强制使用另一种文化,以自动从基本字符中去除特殊符号。但我似乎也无法让它发挥作用。

基本上,我不想创建一个应用程序,您必须不断更新字符列表并冒一个未定义的新特殊字符的风险,通过并在接收应用程序上导致错误。但是我有选择吗?

4

2 回答 2

2

另一种选择是使用正则表达式来替换您想要的字符。

更重要的是,您确实意识到以这种方式映射字符可能会引起一些混乱,对吧?例如,日耳曼语言将 ä 映射到 ae、ü 到 ue 和 ö 到 oe,映射到 a、u 和 o 会改变某些单词的含义。

于 2012-04-16T10:48:06.333 回答
0

我的问题是:有没有更好或更“聪明”的方式来做到这一点?

...

基本上,我不想创建一个应用程序,您必须不断更新字符列表并冒一个未定义的新特殊字符的风险,通过并导致接收应用程序出错。但是我有选择吗?

没有“更聪明的方式”,因为您没有提供“特殊字符”是什么的定义,也没有提供如何生成它的替换的定义

事实上,正如@msam 所指出的,不同的语言可能有不同的替换相同字符的规则。

使此代码更灵活的一种方法是将所有“特殊字符”及其相应“替换”的集合放入单独的 XML 文件中。这样,代码将永远不必修改。

于 2012-04-16T12:28:35.637 回答