在Java中读取XML的最佳方法

时间:2011-08-25 09:36:27

标签: java xml

从我们的其他一些应用程序中获取XML文件。

我希望逐节点地读取该XML文件,并在数据库中存储节点值以供进一步使用。

那么,使用Java读取XML文件和检索节点值的最佳方法/ API是什么?

8 个答案:

答案 0 :(得分:7)

有各种各样的工具。今天,我更喜欢两个:

这是Simple和JAXB之间的一个很好的比较:http://blog.bdoughan.com/2010/10/how-does-jaxb-compare-to-simple.html

就个人而言,我更喜欢Simple更好,因为Niall的支持非常好,但是JAXB(如上面的博客文章中所解释的)可以用更少的代码产生更好的输出。

StAX是一个更基本的API,它允许您读取不适合RAM的XML文档(Simple和JAXB都不允许您“逐个对象地”读取XML文档 - 它们总是会尝试将所有内容加载到RAM一下子。)

答案 1 :(得分:4)

如果你可以管理,我会建议使用一个简单的XML工具。

例如,我和我的大学引入了复杂的XML框架,起初就像一个魅力。 然后你忘记了框架,你有专门的构建文件,只是为了将XML映射到bean,你有注释bean,你为项目的新开发人员提供了新的障碍。你失去了很多重构的自由。

最后,您会感到遗憾的是,您使用复杂的框架在开始时节省了一些时间,并且我已经不止一次看到框架在重构中被抛弃了,因为每个人都对它有负面的感觉,尽管他们在纸上很擅长。

如果您很少使用复杂的XML框架,那么请三思而后行。如果您和您的团队经常使用它们,那么它们就是您的选择。

答案 2 :(得分:4)

我建议使用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表达式以满足您的需求。

答案 3 :(得分:2)

试试Apache Xerces。它成熟而强大。任何这样的可用替代品也会这样做,只是一定不要推出自己的实现。

答案 4 :(得分:2)

dom4jjdom非常易于使用(忽略了要求&#34;最好&#34;片刻;)

答案 5 :(得分:2)

完全解决了解析xml并将值存储在数据库中的问题,我想质疑是否需要执行上述操作。现在大多数数据库都可以处理xml,因此它可以以某种方式存储到表中而无需解析内容;通常可以使用'xmlselect()'和类似的函数来查询表中列中的这种xml的内容。

想想这一秒;如果在近期或遥远的未来,您从其他应用程序获得的xml内容发生了变化,您将需要进行大量更改。如果它经常变化,它将成为一场噩梦。

干杯, 维姆

答案 6 :(得分:0)

试试XStream,这个很简单。

答案 7 :(得分:0)

好吧,我使用stax来解析相当多的XML节点,这些节点比Dom和sax消耗更少的内存,因为它具有拉取XML数据的风格。对于大型XML数据节点,Stax可能是一个不错的选择。

相关问题