多个xslt转换

问题描述 投票:0回答:1

在输入中,我有xml文件(可以是1000或100000个文件),我必须将其转换为6个csv文件,以便以后保存到数据库中。我的问题是如何在Java中更有效地执行此操作,现在我用不同的xslt样式表创建6个转换器,并手动将xml转换6次。我尝试在一个具有功能的xslt转换中执行此操作:结果文档,它可以工作,但是在输入中可能有多个xml文件,并且在重写结果文件中的每个转换数据之后。我的想法是从csv中的xml文件中收集所有数据,然后将其复制到db表中。

TransformerFactory tf = TransformerFactory.newInstance();

Transformer transformer = tf.newTemplates(stylesource).newTransformer();
Transformer transformer2 = tf.newTemplates(stylesource2).newTransformer();
Transformer transformer3 = tf.newTemplates(stylesource3).newTransformer();
Transformer transformer4 = tf.newTemplates(stylesource4).newTransformer();
Transformer transformer5 = tf.newTemplates(stylesource5).newTransformer();
Transformer transformer6 = tf.newTemplates(stylesource6).newTransformer();

DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();

public void transformXmlToCsv(String content) throws TransformerException, IOException, SAXException {
    Document doc = db.parse(new InputSource(new StringReader(content)));
    Source source = new DOMSource(doc);

    transformer.transform(source, outputTarget);
    transformer2.transform(source, outputTarget2);
    transformer3.transform(source, outputTarget3);
    transformer4.transform(source, outputTarget4);
    transformer5.transform(source, outputTarget5);
    transformer6.transform(source, outputTarget6);
}
java xml xslt xml-parsing
1个回答
0
投票

您可以做的一项改进是,通过一次构建输入树来避免重复分析源文档。例如,通过构建DOM树并使用DOMSource,或者(如果使用Saxon,则更好)是使用Saxon接口以Saxon的内部格式构建树。

另一种改进是为所有内容仅创建一个TransformerFactory。创建一个TransformerFactory通常很昂贵(它涉及对类路径的搜索),并且不需要创建多个。

使用xsl:result-document解决问题应该很容易。有很多方法可以做到这一点,例如通过将每个转换的输出定向到不同的目录,但是如果没有更多信息,我无法确定最好的方法是什么。

© www.soinside.com 2019 - 2024. All rights reserved.