将xml节点/文档/片段作为参数传递给xslt

ith*_*uil 7 java xalan

我试图传递一个w3c.dom.Document,ElementNodeList作为参数传递给xslt变换.

我希望能够在xslt中处理它:

<xsl:param name="links" />
<xsl:template match="/">
    <record>
        <xsl:for-each select="$links/*">
            <test />
        </xsl:for-each>
    </record>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)

我将参数传递为:

        Document params = createLinksParams(links);
        transformer.setParameter("links", params);
Run Code Online (Sandbox Code Playgroud)

我得到这个例外:

'从'com.sun.org.apache.xerces.internal.dom.DocumentImpl'到'node-set'的转换无效.'

我也试过exslt:node-set(),xalan:nodeset()等等,但它不工作.

似乎内部xalan除了他自己的Node实现.

如何在不引发此问题的情况下做类似的事情?

我无法使用,document($param)因为我在运行中构建了doc.

Nee*_*aks 4

(发布一个新答案,因为前一个答案没有解决问题,而这个新答案与前一个答案完全不同)

似乎是 XALAN 编译处理器的一个已知问题(XALANJ-2057如何将节点作为参数传递给 XSLTC 处理器的 translet)。

那么,有哪些替代方案呢?

  1. 弄乱 URI,如对How can I pass a node asparameter to translet for XSLTC Processor帖子的响应中所述
  2. 使用XALAN 解释处理器代替 XALAN 编译处理器 (XSLTC) 。或任何其他支持此类行为的 XSLT 处理器。
  3. 请改用 DTMAxisIterator ,这也在对How can I pass a node asparameter to translet for XSLTC Processor帖子 的响应中进行了概述- 但不确定它是否会起作用。
  4. 创建一个新的 DOM 树,将“参数”DOM 和原始 XSLT 输入文档结合起来

  • 当作为参数传递的节点来自 DOM 文档(而不是正在转换的文档)时,解决方案 3 似乎不起作用。 (2认同)