我有一个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的值。
感谢您对此案件的任何回复。
答案 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处理器中有相同的函数。