我目前正在尝试让我的代码调用xml文件和xsl -然后执行转换并根据xml内容输出多个结果文件。
import javax.xml.transform.*;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
public class TestTransformation {
public static void main(String[] args) throws TransformerException {
System.setProperty("javax.xml.transform.TransformerFactory","net.sf.saxon.TransformerFactoryImpl");
TransformerFactory tFactory = TransformerFactory.newInstance();
Source xslt = new StreamSource(new File("transformer.xslt"));
Transformer transformer = tFactory.newTransformer(xslt);
Source xmlText = new StreamSource(new File("data.xml"));
transformer.transform(xmlText, new StreamResult(new File("output.xml")));
但是我想转换产生多个输出文件..任何想法都将非常感激!!
我希望转换产生多个输出文件。
在XSLT样式表本身中完成:http://www.w3.org/TR/xslt20/#result-trees
这是假设您确实在使用XSLT 2.0处理器。在XSLT 1.0中,您可以使用EXSLT扩展名:http://exslt.org/exsl/elements/document/index.html—只要您的处理器支持它。
您应该使用<xsl:result-document/>
来生成多个文件(注意它仅在XSL 2.0版本中可用)。也不需要指定输出文件。
下面的代码显示了如何处理多个输出文件:
public class TestTransformation {
public static void main(String[] args) throws TransformerException {
TransformerFactory tFactory = TransformerFactory.newInstance("net.sf.saxon.TransformerFactoryImpl", TestTransformation.class.getClassLoader());
Source xslt = new StreamSource(new File("transformer.xslt"));
Transformer transformer = tFactory.newTransformer(xslt);
Source xmlText = new StreamSource(new File("data.xml"));
transformer.transform(xmlText, new DOMResult());
}
}
data.xml:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="hello.xsl"?>
<p>
<p1>Hello world!</p1>
<p2>Hello world!</p2>
</p>
transformer.xml:
<?xml version="1.0"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="p1">
<xsl:result-document href="foo.xml"/>
</xsl:template>
<xsl:template match="p2">
<xsl:result-document href="bar.xml"/>
</xsl:template>
</xsl:stylesheet>