如何将XML文档作为参数传递给java(oracle xdk)中的XSL转换?
我试图将XML文档作为参数传递给XSLT样式表。我相信代码使用的是OracleXDK进行转换(它使用的是JDK1.4.2和Spring,我对代码库还不熟悉,所以我不确定最终加载的是什么)。在我的第一次尝试中,我刚刚创建了一个document对象并将其设置为transformer上的参数,但尝试将变量复制到树中却没有结果。我想到的问题是:如何将XML文档作为参数传递给java(oracle xdk)中的XSL转换?,java,xslt,oracle-xdk,Java,Xslt,Oracle Xdk,我试图将XML文档作为参数传递给XSLT样式表。我相信代码使用的是OracleXDK进行转换(它使用的是JDK1.4.2和Spring,我对代码库还不熟悉,所以我不确定最终加载的是什么)。在我的第一次尝试中,我刚刚创建了一个document对象并将其设置为transformer上的参数,但尝试将变量复制到树中却没有结果。我想到的问题是: 在XSLT转换器的一般情况下,这可能吗?(看起来应该是这样,因为XSLT变量/参数通常可以包含节点集) oracle XDK(或xalan,也在类路径中)是否可
答案是这是可能的,但是,这是不直观的,至少对于Oracle XSL处理器是如此。我尝试了以下(非工作)调用(更改名称以保护无辜): 及 (第二种方法的基础是DOMSource可能会工作,因为它是DOM的java.xml.transform接口)。最后对我有效的调用是了解XSL使用XPath,变量的有效类型本质上是字符串或节点集,XPath返回节点集。以下是我的作品:
Document x = createDocumentForMe();
XPathExpression xpe = XPathFactory.newInstance().newXPath().compile("/");
transformer.addParameter("param",xpe.evaluate(x, XPathConstants.NODESET));
它基本上使用XPath来获取只包含传入DOM对象的根文档的节点集。然而,这看起来有点像黑客,可能无法与其他XSL处理器一起工作,所以YMMV
Document x = createDocumentForMe();
transformer.addParameter("param",new DOMSource(x));
Document x = createDocumentForMe();
XPathExpression xpe = XPathFactory.newInstance().newXPath().compile("/");
transformer.addParameter("param",xpe.evaluate(x, XPathConstants.NODESET));