【问题标题】:Using Transformer in java for multiple outputs from an XSLT?在java中使用Transformer从XSLT的多个输出?
【发布时间】:2015-05-31 20:44:13
【问题描述】:

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

但我希望转换产生多个输出文件。任何想法将不胜感激!

【问题讨论】:

标签: java xml xslt xslt-2.0 transformer


【解决方案1】:

我希望转换生成多个输出文件。

您可以在 XSLT 样式表本身中执行此操作:http://www.w3.org/TR/xslt20/#result-trees

这是假设您确实在使用 XSLT 2.0 处理器。在 XSLT 1.0 中,您可以改用 EXSLT 扩展:http://exslt.org/exsl/elements/document/index.html - 只要您的处理器支持它。

【讨论】:

    【解决方案2】:

    您应该使用<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>
    

    【讨论】:

      猜你喜欢
      • 2010-11-10
      • 1970-01-01
      • 2019-07-15
      • 1970-01-01
      • 2013-06-21
      • 1970-01-01
      • 2014-09-15
      • 1970-01-01
      • 2015-02-05
      相关资源
      最近更新 更多