我需要将外部文件合并到单个 XSLT 1.0 文件中,因为转换将在内存中执行,而无需访问原始文件结构。我无法弄清楚如何合并读入变量的文件。
原始变量声明如下所示。(参数 pLang 在我遇到问题的选择语句中是必需的(:
<xsl:param name="pLang" select="'no'"/>
<xsl:variable name="moduleDoc" select="document('Headlines.xml')"/>
我已经用标题文件的内容填充了moduleDoc变量,如下所示:
<xsl:param name="pLang" select="'no'"/>
<xsl:variable name="moduleDoc">
<module xmlns:mmx="http://funx" xmlns:svg="http://www.w3.org/2000/svg" xmlns:fnc="http://funx/fnc" xmlns:att="http://funx/att" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<document-merge>
<g-funcs>
<g name="IssueDate">
<g-lang xml:lang="no">Fakturadato</g-lang>
<g-lang xml:lang="nn">Fakturadato</g-lang>
<g-lang xml:lang="en">Issue date</g-lang>
</g>
<!--snip -->
</g-funcs>
</document-merge>
</module>
</xsl:variable>
select 语句如下所示:
<xsl:value-of select="$moduleDoc/module/document-merge/g-funcs/g[@name='IssueDate']/g-lang[lang($pLang)]"/>
当 moduleDoc 变量引用外部文件时,这工作正常,但在合并后我收到一个撒克逊错误:
要在路径表达式中使用结果树片段,请使用 exsl:node-set(( 或指定 version='1.1'
访问变量中这些节点的正确方法是什么?
我想出
解决方案是以这样的方式使用节点集扩展:
<xsl:value-of select="exsl:node-set($moduleDoc)/module/document-merge/g-funcs/g[@name='IssueDate']/g-lang[lang($pLang)]"/></b>
还需要命名空间声明:
xmlns:exsl="http://exslt.org/common"