在java中对来自XSLT的多个输出使用Transformer



我目前正在尝试让我的代码调用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>

相关内容

  • 没有找到相关文章

最新更新