我想知道如何使用java和xsl从一个xml生成多个输出(html)。
例如,拥有这个xml:
<ARTICLE>
<SECT>
<PARA>The First 1st Major Section</PARA>
</SECT>
<SECT>
<PARA>The Second 2nd Major Section</PARA>
</SECT>
</ARTICLE>
对于“ARTICLE”中的每个子元素“SECT”,我希望有一个“.html”作为输出,输出示例:
sect1.html
<html>
<body>
<div>
<h1>The First 1st Major Section</h1>
</div>
</body>
</html>
sect2.html
<html>
<body>
<div>
<h1>The First 2nd Major Section</h1>
</div>
</body>
</html>
我一直在java中使用下一个代码转换.xml文档:
File stylesheet = new File(argv[0]);
File datafile = new File(argv[1]);
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse(datafile);
// Use a Transformer for output
TransformerFactory tFactory = TransformerFactory.newInstance();
StreamSource stylesource = new StreamSource(stylesheet);
Transformer transformer = tFactory.newTransformer(stylesource);
DOMSource source = new DOMSource(document);
OutputStream result=new FileOutputStream("sections.html");
transformer.transform(source, new StreamResult(result));
问题是我只有一个输出,你能帮我写一下.xslt文件吗?并告诉我如何获得超过1个输出?
答案 0 :(得分:1)
要创建多个结果文档,您需要一个支持多个结果文档的XSLT处理器。 XSLT 2.0中引入了多个结果文档的功能。一些尚未实现XSLT 2.0或更新版本的XSLT处理器将多个结果文档作为专有扩展。
与主要结果文档不同,创建多个结果文档不是直接从Java源代码控制的。相反,XSLT代码需要包含创建多个结果文档的XSLT元素。
在XSLT 2.0及更高版本中,<xsl:result-document/>
元素用于创建多个结果文档。有关更多信息和示例,请参阅XSLT 2.0, <xsl:result-document/>
。
据我所知,Java附带的XSLT处理器是Xalan-J,而Xalan-J还不支持XSLT 2.0或更新版本(根据他们的网站http://xml.apache.org/xalan-j/)。您可能希望使用Saxon,它支持XSLT 3.0。或者如上一个问题Xalan XSLT multiple output files?中所述,您可以使用Redirect extension。