我从其他应用程序中获取了一个XML文件。
我想逐个读取这个XML文件的节点,并将节点值存储到数据库中以供进一步使用。
那么,使用Java读取XML文件和检索节点值的最佳方式/API是什么?
我从其他应用程序中获取了一个XML文件。
我想逐个读取这个XML文件的节点,并将节点值存储到数据库中以供进一步使用。
那么,使用Java读取XML文件和检索节点值的最佳方式/API是什么?
有各种各样的工具可以用来处理XML。今天,我比较喜欢以下两个:
这里有一个很好的比较Simple和JAXB的文章:http://blog.bdoughan.com/2010/10/how-does-jaxb-compare-to-simple.html
就个人而言,我更喜欢Simple,因为Niall提供了非常好的支持,但是JAXB(如上面的博客文章所述)可以用更少的代码生成更好的输出。
StAX是一个更基本的API,它允许您读取XML文档,这些文档无法简单地逐个加载到RAM中(Simple和JAXB都不允许您“逐个”读取XML文档 - 它们总是会尝试一次性将所有内容加载到RAM中)。
我建议使用XPath。Xalan已经包含在JDK中(不需要外部jar文件),并且它符合您的要求,即遍历元素节点(我假设)并存储它们的文本值。例如:
String xml = "<root> <item>One</item> <item>Two</item> <item>Three</item> </root>";
XPathFactory xpf = XPathFactory.newInstance();
InputSource is = new InputSource(new StringReader(xml));
NodeList nodes = (NodeList) xpf.newXPath().evaluate("/*/*", is,
XPathConstants.NODESET);
for (int i = 0; i < nodes.getLength(); ++i) {
Element e = (Element) nodes.item(i);
System.out.println(e.getNodeName() + " -> " + e.getTextContent());
}
}
这个例子返回所有非根元素的列表,并打印出相应的元素名称和文本内容。根据你的需求调整xpath表达式。
试试 Apache Xerces。它非常成熟且稳定。其他可用的替代方案也可以,但一定不要开发自己的实现。
试试XStream,这个非常简单。
嗯,我使用了Stax来解析相当大量的XML节点,它比Dom和sax消耗更少的内存,因为它是一种拉取XML数据的方式。对于大型XML数据节点,Stax可能是一个不错的选择。