XSLT如何将ISO Alpha 2国家代码转换为对应国家名称
可行实现思路
方案1:使用XPath 3.1 内置fn:country-name()函数(推荐)
- 这是最简便的方案,XPath 3.1标准内置了
fn:country-name()函数,原生支持ISO 3166-1 alpha-2双字符国家代码到正式国名的转换,不需要自行维护任何映射关系,映射数据由XSLT处理器基于Unicode CLDR标准库内置提供,后续国家代码变更、名称更新都会随处理器版本升级自动同步,无需修改业务代码。 - 使用示例:
假设输入XML节点为<countryCode>DE</countryCode>,要输出英文国名可以直接写:
第二个参数为输出语言的语言代码,如需输出中文国名替换为<!-- 如果XSLT根节点已经声明了xmlns:fn="http://www.w3.org/2005/xpath-functions"命名空间,可省略fn前缀 --> <xsl:value-of select="fn:country-name(countryCode, 'en')" />zh即可。 - 适用环境:支持XSLT 3.0 / XPath 3.1的处理器,如Saxon 9.8及以上版本。
方案2:外置独立映射文件(兼容XSLT 1.0/2.0老环境)
- 如果你的运行环境只能使用低版本XSLT,不支持3.1标准函数,可以将映射数据完全从XSLT中剥离,单独使用官方发布的ISO 3166标准XML映射文件,在XSLT中通过
document()函数加载后查询即可。 - 你不需要自行维护这个映射文件,直接使用公开的ISO 3166官方导出数据即可,后续映射更新只需要替换这个外置XML文件,完全不需要修改XSLT代码。
- 使用示例:
首先准备外置映射文件iso-3166.xml,结构如下:
XSLT中调用逻辑:<countries> <country code="DE" name="Germany"/> <country code="CN" name="China"/> <!-- 其余映射由官方数据直接生成 --> </countries><!-- 预加载映射文件 --> <xsl:variable name="countryMap" select="document('iso-3166.xml')/countries/country" /> <!-- 查询对应国名 --> <xsl:value-of select="$countryMap[@code = current()/countryCode]/@name" />
方案3:调用语言扩展函数(特定运行环境适用)
- 如果你的XSLT处理器支持调用宿主语言的扩展方法(比如Java环境下的Saxon、.NET环境下的XslCompiledTransform),可以直接调用对应语言内置的地区类库方法实现代码转换,映射数据由标准类库维护,不需要自行更新。
- 以Java环境为例,可以直接调用ICU4J库的
Locale.getDisplayCountry()方法实现转换。
内容的提问来源于stack exchange,提问作者Sudesh
相关产品推荐
相关产品推荐

