You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Saxon s9api中如何将节点作为参数设置到转换中并在转换内访问

Saxon s9api中如何将节点作为参数设置到转换中并在转换内访问

我来帮你搞定这个在Saxon s9api里传递节点参数的问题~你现在遇到的情况是只能用原子值(比如QName TEST XdmAtomicValue 24)作为参数,但想要传递像<TempNode><local>Value1</local></TempNode>这样的结构化节点,其实核心就是要先创建出对应的XdmNode实例,再用setParameter传递,下面给你一步步讲具体操作:

第一步:创建XdmNode实例

你可以通过Saxon的DocumentBuilder来构建目标节点,有两种常用方式:

方式1:从XML字符串直接解析

这种方式简单直接,适合你已经明确节点内容的情况:

// 先初始化Saxon Processor
Processor processor = new Processor(false);
DocumentBuilder docBuilder = processor.newDocumentBuilder();

// 定义你要传递的节点XML字符串
String tempNodeXml = "<TempNode><local>Value1</local></TempNode>";
// 解析成XdmNode
XdmNode tempNode = docBuilder.build(new StringReader(tempNodeXml));

方式2:手动构建节点(适合动态生成内容的场景)

如果需要动态生成节点内容,可以用Saxon的XPath构造API:

Processor processor = new Processor(false);
DocumentBuilder docBuilder = processor.newDocumentBuilder();
// 创建一个空的文档节点作为上下文
XdmNode emptyDoc = docBuilder.build(new ByteArrayInputStream("<root/>".getBytes()));
// 获取XPathCompiler来构造节点
XPathCompiler xpathCompiler = processor.newXPathCompiler();
// 用XPath表达式生成目标节点
XdmNode tempNode = (XdmNode) xpathCompiler.evaluate(
    "element(TempNode, element(local, 'Value1'))",
    emptyDoc,
    XPathResult.SINGLE_NODE
);

第二步:将XdmNode设置为转换参数

拿到XdmNode后,直接用XsltTransformer的setParameter方法传递即可,注意参数名要用QName指定:

// 假设你已经初始化好了XsltTransformer实例
XsltTransformer transformer = ...;

// 定义参数名称(如果涉及命名空间,要传入对应的命名空间URI)
QName paramName = new QName("TempParam");
// 设置参数,直接传入XdmNode
transformer.setParameter(paramName, tempNode);

第三步:在XSLT转换中访问节点参数

在你的XSLT文件里,需要先声明对应的参数并指定节点类型,之后就可以像操作普通XML节点一样使用它了:

<!-- 声明参数,指定类型为element(TempNode) -->
<xsl:param name="TempParam" as="element(TempNode)"/>

<!-- 访问节点内容,比如取出local子节点的值 -->
<xsl:value-of select="$TempParam/local"/>

补充说明

你之前尝试过XdmItem,其实XdmNode是XdmItem的子类,而setParameter的第二个参数接受XdmValue类型(XdmItem也是XdmValue的子类),所以只要能正确创建出XdmNode,就可以直接传递啦。

备注:内容来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 14:47:27