阅读整个XML文件并存储在内存中java

问题描述:

这是我正在尝试做的。阅读整个XML文件并存储在内存中java

  1. 读取整个XML文件(我不在乎元素或属性的名称等)。
  2. 将读取的XML文件保存到内存中。
  3. 更新读取xml文件的一些值。
  4. 回写到XML文件。

我想使用XMLStreamReader来读取XML文件,但是到目前为止我看到的所有例子,它看起来像我必须提供元素名称。但是,我不在乎元素名称,只是想将entier XML文件读入内存。而且,我不确定数据类型应该如何存储,因为我正在阅读。我正在考虑将它们存储到Document数据类型中。

有关如何读取整个XML文件并将读取内容存储在memeory中的任何建议?

谢谢。

+0

不关心元素名称,属性等,你如何期望你的更新最终在正确的地方? – 2012-07-13 19:01:56

+2

看看http://tutorials.jenkov.com/java-xml/dom.html – 2012-07-13 19:02:25

+1

你想在哪里添加内容?文件结尾?如果不是,不知道在哪里添加,你怎么找到点? – kosa 2012-07-13 19:02:35

最简单的方法是使用JAXB。您可以使用xjc从您的XML模式生成Java类。然后使用JAXB来卸载(加载)数据,像对待任何其他对象(使用getters/setter)一样操纵Java对象,然后将其保存(保存)回XML文件。

您也可以直接使用DOM,但操作DOM比使用直接反映XML结构的POJO更繁琐。

+0

+1我喜欢JDom,因为它的方便的API。 – 2012-07-13 19:25:34

XMLStreamReader是一个面向事件的解析器,它为您提供了一个类似于流的XML视图。你显然需要在内存中的整个XML树,所以最好的办法是JDOM:

public Document parse(Reader in) { 
    return new SAXBuilder().build(in); 
} 

JDOM比JAXB的优点是导航:你可以用一个简单的语句,比如"//my-elem"取一个元素深入到XML树。使用JAXB,您将编写一个barnful代码和嵌套循环来获得这个简单的结果。

(更何况,如果没有你的XML的XML模式,JAXB甚至不会和你说话。)

有时候JAXB可能是矫枉过正,和DOM是确定的几个操作:

DocumentBuilderFactory f = DocumentBuilderFactory.newInstance(); 
DocumentBuilder builder = f.newDocumentBuilder(); 
Document doc = builder.parse(new File("test.xml"));