【问题标题】:How to pass an XML document as a parameter to an XSL transform in java (oracle xdk)?如何将 XML 文档作为参数传递给 java (oracle xdk) 中的 XSL 转换?
【发布时间】:2011-01-01 08:58:23
【问题描述】:

我正在尝试将 XML 文档作为参数传递给 XSLT 样式表。我相信代码正在使用 oracle XDK 进行转换(它使用 JDK 1.4.2 和 Spring,我是代码库的新手,所以我不确定最终加载了什么)。在我的第一次尝试中,我只是创建了一个文档对象并将其设置为转换器的参数,但尝试将变量复制到树中没有结果。想到的问题是:

  1. 这在 XSLT 转换器的一般情况下是否可行? (看起来应该是,因为 XSLT 变量/参数通常可以包含节点集)

  2. 是否可以专门使用 oracle XDK(或 xalan,它也在类路径中)?

  3. 如果是这样,我该如何让它发挥作用?

【问题讨论】:

    标签: java xslt oracle-xdk


    【解决方案1】:

    答案是这是可能的,但是,这是不直观的,至少对于 Oracle XSL 处理器而言。我尝试了以下(非工作)调用(更改名称以保护无辜者):

    Document x = createDocumentForMe();
    transformer.addParameter("param",x);
    

    Document x = createDocumentForMe();
    transformer.addParameter("param",new DOMSource(x));
    

    (这第二个是基于 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 对象的根文档的节点集。但是,这似乎有点 hack,并且可能不适用于其他 XSL 处理器,所以 YMMV...

    【讨论】:

      猜你喜欢
      • 2012-11-03
      • 1970-01-01
      • 1970-01-01
      • 2019-06-17
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2016-07-07
      • 1970-01-01
      相关资源
      最近更新 更多