我目前正在尝试让我的代码调用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")));
但是我希望转换能够生成多个输出文件..任何想法都会非常感激!!
答案 0 :(得分:2)
我希望转换生成多个输出文件。
您可以在XSLT样式表本身中执行此操作:http://www.w3.org/TR/xslt20/#result-trees
这假设您确实使用的是XSLT 2.0处理器。在XSLT 1.0中,您可以使用EXSLT扩展名:http://exslt.org/exsl/elements/document/index.html - 只要您的处理器支持它。
答案 1 :(得分:0)
您应该使用<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>