【问题标题】:Replacing Special Characters With Regular Alphabet in .Net / XSL?在.Net / XSL中用常规字母替换特殊字符?
【发布时间】:2012-04-27 15:52:35
【问题描述】:

我正在尝试用 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 内联代码来简单地在文本上强制使用另一种文化,以自动从基本字符中去除特殊符号。但我似乎也无法让它发挥作用。

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

【问题讨论】:

  • 您可以考虑使用msxsl:script 嵌入C# 或VB 代码,以使用stackoverflow.com/questions/3769457/… 中提供的代码实现扩展功能。但这一切都取决于您的需求或您对“特殊字符”的定义以及它们的替换是否与该答案中使用的匹配。
  • 没有“更聪明的方式”,因为您没有提供“特殊字符”是什么的定义,也没有提供如何生成它的替换的定义。事实上,正如@msam 所指出的,不同的语言可能有不同的替换相同字符的规则。使此代码更灵活的一种方法是将所有“特殊字符”及其相应“替换”的集合放入单独的 XML 文件中。这样,代码将永远不必修改。

标签: .net xslt replace biztalk


【解决方案1】:

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

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

【讨论】:

  • 是的,我知道缺点,源和目标系统是我无法控制的。此外,在源系统上决定和检查了一些约束检查,例如字符串长度等,因此使用可以将 ä 替换为 ae 的解决方案可能会产生错误,因此也不是一种选择。不过,感谢您的回复。 :)
【解决方案2】:

我的问题是:有没有更好或“更聪明”的方法?

...

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

没有“更智能的方式”,因为您没有提供“特殊字符”是什么以及应该如何生成它的替换的定义

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 2014-11-03
    • 1970-01-01
    • 2020-04-13
    相关资源
    最近更新 更多