【发布时间】:2019-06-17 12:50:45
【问题描述】:
我正在使用javax.xml.transform API 进行 XSL 转换。 API 只允许一个 XML 文档作为输入来应用转换,如下所示。
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
StringWriter stringWriter = new StringWriter();
File xml = new File("C:\\abc");
File xsl = new File("C:\\def.xsl");
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse(xml);
TransformerFactory transformerFactory =
TransformerFactory.newInstance();
StreamSource style = new StreamSource(xsl);
Transformer transformer = transformerFactory.newTransformer(style);
DOMSource source = new DOMSource(document);
另外,可以传递简单的字符串参数如下,没有任何问题如下:
transformer.setParameter("mode", "CREATE");
但是,我想将 XML 文档作为参数传递给 XSL 文件。我按照 SO 页面之一的建议尝试了以下代码,如下所示:
DocumentBuilder builder = factory.newDocumentBuilder();
final Document documentFile = builder.parse(xml2);
Map<String, Document> docs = new HashMap<String, Document>();
docs.put("lookup", documentFile);
transformer.setURIResolver(new DocumentURIResolver(docs));
我设置,XML 中的标签接收值如下:
<xsl:variable name="lookup" select="('documentFile')/> .
但它对我不起作用。谁能帮我支付正确的报酬,通过 javax.xml.transform API 将多个 XML 文档传递给任何 XSL 文件?
更新
问题仍然存在,谁能告诉我如何将 XML 对象作为参数传递到 XSLT 2.0 样式表中。我尝试了不同的方法,但仍然没有运气。我需要知道通过 JAVA xsl 转换 API 的出路。
【问题讨论】:
-
如果您询问
java.xml.tansform但将问题标记为xslt-2.0,您使用哪个XSLT 处理器?如您所知,XSLT 从 1.0 版开始具有强大的document功能,允许直接从 XSLT 中加载/访问其他 XML 文档,甚至可以一步完成? -
嗨 Martin,我没有专门使用任何处理器,所以我假设正在使用默认 XSLT 处理器。我知道 XSLT 有强大的文档功能,但我想通过 transformer.setParameter() 函数传递该文档,类似于传递字符串或整数参数的方式,所以我需要知道我们是如何做到的?
-
任何帮助将不胜感激! :)
-
嗯,Oracle Java JRE 中的默认 XSLT 处理器通常是 Xalan 的某个内部化版本,而 Xalan 肯定不是 XSLT 2 处理器,所以不知道您为什么将问题标记为该版本。我认为单个参数可能可以作为 W3C DOM 文档或一般的节点传递。
-
谢谢马丁!可能是我没有意识到这一点。但是,如果我将它设置为 W3C DOM 文档,我正在努力在 XSLT 端接收它的正确表达式应该是什么。
标签: java xml xslt-2.0 transformation