.net - AddExtensionObject - 性能

标签 .net xslt internationalization

.NET XSLT 引擎允许通过 AddExtensionObject 方法将对象传递给 XSLT 处理引擎。

有人可以评论使用它来检索要在 XSLT 中使用的本地化字符串的性能吗?

最佳答案

Extension objects如果 XSLT 转换的一部分被认为效率低下,则可以使用 来提高性能。

虽然使用扩展方法的方法不会降低性能(排除错误和低效代码),如果使用适当的 XSLT 技术访问本地化字符串,它们不会显着提高性能

如果不是迫切需要扩展对象,创建纯 XSLT 解决方案总是好的。这提供了可移植到任何平台的额外好处,该平台提供了兼容的 XSLT 处理器

可以将给定语言的所有本地化字符串放在单独的 XML 文件中。将使用 XSLT 访问此文件 document() 功能。每个字符串将由其 @msgId 索引使用 <xsl:key> 构建的索引的属性操作说明。在转换中,将使用 XSLT key() 获取单个消息功能。

下面是一个小代码示例,展示了如何通过 msgId 和 Languge-code 从 xml 文件中检索消息,其中存储了所有语言的消息。为方便起见,我们将消息放在 XSLT 样式表本身中。实际上,消息可以在单独的 XML 文件中:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:key name="kMsgByLangAndId" match="msg"
      use="concat(../@name, @msgId)"/> 
 <xsl:param name="pLang" select="'De'"/>
 <xsl:param name="pTime" select="19"/>
 <xsl:variable name="vMsgEn">
  <msg msgId="MornGreet">Good morning.</msg>
  <msg msgId="AftnGreet">Good afternoon.</msg>
  <msg msgId="EvnGreet">Good evening.</msg>
 </xsl:variable>
 <xsl:variable name="vMsgDe">
  <msg msgId="MornGreet">Guten morgen.</msg>
  <msg msgId="AftnGreet">Guten tag.</msg>
  <msg msgId="EvnGreet">Guten abend.</msg>
 </xsl:variable>
    <xsl:template match="/">
      <xsl:variable name="vLangVarName"
           select="concat('vMsg', $pLang)"/>
    <xsl:variable name="vMsgId">
      <xsl:choose>
       <xsl:when test="not($pTime >= 12)">MornGreet</xsl:when>
       <xsl:when test="not($pTime >= 18)">AftnGreet</xsl:when>
       <xsl:otherwise>EvnGreet</xsl:otherwise>
      </xsl:choose>
    </xsl:variable>
   <xsl:for-each select="document('')">
    <xsl:value-of select=
      "key('kMsgByLangAndId',
            concat($vLangVarName,$vMsgId)
            )"/>
   </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

当此转换应用于任何源 XML 文档(忽略)时,会产生所需的结果:

Guten abend.

关于.net - AddExtensionObject - 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/393661/

相关文章:

xml - 用逗号连接两个节点值

xslt - Saxon 9 XSLT变形金刚vs Xalan 2.7

node.js - 如何在 Pug 模板文件中使用 i18n 变量?

c# - .NET Windows 控件的样式表

c# - 如何在 .Net WPF 应用程序中使用 Serilog 自动尾部(删除)旧日志?

.net - .Net 中是否有类似 zip 的方法?

javascript - 如何读取 XSL-T 中的 URL 然后将其传递到 jQuery 函数?

.net - 在部分信任程序集调用的受信任程序集中授予 FullTrust

javascript - react-redux-i18n 切换语言

fonts - 关于多语言支持的字体和字符集,我需要了解什么