在java中不使用XSLT将XML转换为CSV
第一次使用堆栈溢出,我现在是一名学生,正在做一个用于分析的项目,但公司将所有记录存储到XML中,我必须将其转换并制作一个程序,以便通过电子邮件自动发送报告 我使用java来做XML解析器,现在我正在尝试Apache common digester,因为其他解析器需要XSLT来做这件事,但我想要一个不依赖XSLT的程序,因为该公司需要一个系统,并像每5分钟一次的摘要一样发送一份报告。因此,正如我在这里看到的一些答案一样,使用XSLT可能相当慢。所以,我想知道如何使用digester或其他方法进行转换,如果可能的话,尝试展示一些代码示例,以进行转换 以下是我在digester下构建的示例代码:在java中不使用XSLT将XML转换为CSV,java,xml,xslt,csv,Java,Xml,Xslt,Csv,第一次使用堆栈溢出,我现在是一名学生,正在做一个用于分析的项目,但公司将所有记录存储到XML中,我必须将其转换并制作一个程序,以便通过电子邮件自动发送报告 我使用java来做XML解析器,现在我正在尝试Apache common digester,因为其他解析器需要XSLT来做这件事,但我想要一个不依赖XSLT的程序,因为该公司需要一个系统,并像每5分钟一次的摘要一样发送一份报告。因此,正如我在这里看到的一些答案一样,使用XSLT可能相当慢。所以,我想知道如何使用digester或其他方法进行转
public void run() throws IOException, SAXException {
Digester digester = new Digester();
// This method pushes this (SampleDigester) class to the Digesters
// object stack making its methods available to processing rules.
digester.push(this);
// This set of rules calls the addDataSource method and passes
// in five parameters to the method.
digester.addCallMethod("datasources/datasource", "addDataSource", 5);
digester.addCallParam("datasources/datasource/name", 0);
digester.addCallParam("datasources/datasource/driver", 1);
digester.addCallParam("datasources/datasource/url", 2);
digester.addCallParam("datasources/datasource/username", 3);
digester.addCallParam("datasources/datasource/password", 4);
File file = new File("C:\\Users\\1206432E\\Desktop\\datasource.xml");
// This method starts the parsing of the document.
//digester.parse("file:\\Users\\1206432E\\Desktop\\datasource.xml");
digester.parse(file);
}
另一个是使用DOM将CSV转换为XML,但仍然依赖于一个XSLT文件:
试试OpenCsv——所以使用XSLT可能会很慢——有证据支持吗?您实际测量过吗?还没有,但根据stack overflow中的一些评论,性能会下降,公司需要一个程序来帮助他们发送报告,比如说5分钟,因此使用XML的频率会增加。如果使用XSLT,性能将是一个问题,并且可能是下一次公司想要在其中添加更多变量时的问题,因此,如果可能的话,他们继续编辑它会很麻烦,尝试自动化它。如果你想看到链接在这里:可能重复的
public static void main(String args[]) throws Exception {
File stylesheet = new File("C:\\Users\\1206432E\\Desktop\\Style.xsl");
File xmlSource = new File("C:\\Users\\1206432E\\Desktop\\data.xml");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(xmlSource);
StreamSource stylesource = new StreamSource(stylesheet);
Transformer transformer = TransformerFactory.newInstance()
.newTransformer(stylesource);
Source source = new DOMSource(document);
Result outputTarget = new StreamResult(
new File("C:\\Users\\1206432E\\Desktop\\temp.csv"));
transformer.transform(source, outputTarget);
}