Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将XML文档作为参数传递给java(oracle xdk)中的XSL转换?_Java_Xslt_Oracle Xdk - Fatal编程技术网

如何将XML文档作为参数传递给java(oracle xdk)中的XSL转换?

如何将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,也在类路径中)是否可

我试图将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));