将 document() 依赖项合并到单个 XSLT 中



我需要将外部文件合并到单个 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"

相关内容

  • 没有找到相关文章

最新更新