gpt4 book ai didi

java - 多重 xslt 转换

转载 作者:行者123 更新时间:2023-12-02 09:04:26 27 4
gpt4 key购买 nike

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

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);
}

最佳答案

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

另一项改进是只为所有内容创建一个 TransformerFactory。创建一个 TransformerFactory 通常成本很高(它涉及类路径的搜索),并且无需创建多个。

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

关于java - 多重 xslt 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59926489/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com