1

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

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

然后我想在 xsl 中列出所有三种不同的语言作为变量,并使用我的 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 文件中的后缀连接起来。所以我可以写这样的东西:

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

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

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

4

2 回答 2

3

XML 具有通过使用函数http://www.w3.org/TR/xpath/#function-langxml:lang来标准化和指定标记语言和 XSLT/XPath 支持的属性。lang

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

使用 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>
于 2013-06-13T10:03:43.507 回答
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是将 XML 片段转换为节点集的特定于 Microsoft 的函数,但在其他 XSLT 1.0 处理器中也有等效函数。

于 2013-06-13T13:23:11.197 回答