使用xslt创建语言选择器

时间:2013-06-13 09:52:06

标签: xml xslt

我有一个XML和一个XSLT。我应该使用XML文件中的内容生成PDF。

在XML中,有一个元素应该用于选择输出应该是哪种语言。

然后我希望将xsl中列出的所有三种不同语言作为变量,并使用my xml中的值来选择要使用的语言。

所以在我的xsl中:     英文标题     法语标题     西班牙语标题

<xsl:variable name="en_text">Text in english</xsl:variable>
<xsl:variable name="fr_text">Text in french</xsl:variable>
<xsl:variable name="dk_text">Text in spanish</xsl:variable>

在我的XML中:

<Language>en</Language>
...

在我的xsl中,我想将XML中的Language元素的值与xsl-file中的postfix连接起来。所以我可以这样写:

<block><xsl:value-of select="(value from Language element in xml> + _head")</xsl:value-        of></block>

输出应该是变量$ en_head的值。

感谢您对此案件的任何回复。

2 个答案:

答案 0 :(得分:3)

XML标准化了xml:lang属性,并使用lang函数http://www.w3.org/TR/xpath/#function-lang指定标记语言和XSLT / XPath支持。

因此我强烈建议使用该机制而不是构建自己的机制。

使用XSLT 2.0,您可以轻松定义

<xsl:variable name="my-text">
  <list>
    <text xml:lang="en">Text in English</text>
    <text xml:lang="fr">Texte en français</text>
    <text xml:lang="es">Texto en español</text>
  </list>
</xsl:variable>

然后使用

<xsl:template match="Foo">
  <block><xsl:value-of select="$my-text/list/text[lang(current()/Language)]"/></block>
</xsl:template>

答案 1 :(得分:0)

即使在XSLT 1.0中,你也可以做一些类似Martin的建议:

<xsl:stylesheet 
  version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
  exclude-result-prefixes="msxsl">

  <xsl:output method="xml" indent="yes"/>

  <xsl:variable name="my-text">
    <text xml:lang="en">Text in English</text>
    <text xml:lang="fr">Texte en français</text>
    <text xml:lang="es">Texto en español</text>
  </xsl:variable>  

  <xsl:template match="/*">
    <xsl:variable name="language" select="Language"/>
    <block>
      <xsl:value-of select="msxsl:node-set($my-text)/text[lang($language)]"/>
    </block>
  </xsl:template>

</xsl:stylesheet>

msxsl:node-set是一个特定于Microsoft的函数,用于将XML片段转换为节点集,但在其他XSLT 1.0处理器中有相同的函数。