Xml 使用xslt创建语言选择器
我有一个XML和一个XSLT。我应该生成一个包含XML文件内容的PDF 在XML中,应该使用一个元素来选择输出应该是哪种语言 然后,我希望将所有三种不同的语言作为变量列在xsl中,并使用xml中的值来选择使用哪种语言 因此,在我的xsl中: 英文标题 法文标题 西班牙语标题Xml 使用xslt创建语言选择器,xml,xslt,Xml,Xslt,我有一个XML和一个XSLT。我应该生成一个包含XML文件内容的PDF 在XML中,应该使用一个元素来选择输出应该是哪种语言 然后,我希望将所有三种不同的语言作为变量列在xsl中,并使用xml中的值来选择使用哪种语言 因此,在我的xsl中: 英文标题 法文标题 西班牙语标题 <xsl:variable name="en_text">Text in english</xsl:variable> <xsl:variable name="fr_text">Text
<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>
...
en
...
在我的xsl中,我希望将XML中的值from Language元素与xsl文件中的后缀连接起来。所以我可以写一些东西,比如:
<block><xsl:value-of select="(value from Language element in xml> + _head")</xsl:value- of></block>
XML将XML:lang
属性标准化并指定为使用lang
函数标记语言和XSLT/XPath支持
因此,我强烈建议使用该机制,而不是构建自己的机制
使用XSLT2.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>
即使在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处理器中也有等效的函数。我得到了这样的错误:错误:“非静态Java函数“nodeSet”的第一个参数不是有效的对象引用。”我的样式表可能有问题吗?您使用的是像Saxon 9这样的XSLT 2.0处理器还是IBM websphere XML软件包中的处理器?你认为我上面的建议有错误吗?它不使用nodeSet
函数。如果您使用的是XSLT 1.0处理器,那么正如MiMo所指出的,您需要在变量内容上使用扩展函数,例如
。Java XSLT处理器不支持MiMo使用的URL,它将与Microsoft的MSXML或XslTransform一起使用。