2012-07-13 139 views
1

這是我正在嘗試做的。閱讀整個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

回答

3

最簡單的方法是使用JAXB。您可以使用xjc從您的XML模式生成Java類。然後使用JAXB來卸載(加載)數據,像對待任何其他對象(使用getters/setter)一樣操縱Java對象,然後將其保存(保存)回XML文件。

您也可以直接使用DOM,但操作DOM比使用直接反映XML結構的POJO更繁瑣。

+0

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

0

XMLStreamReader是一個面向事件的解析器,它爲您提供了一個類似於流的XML視圖。你顯然需要在內存中的整個XML樹,所以最好的辦法是JDOM:

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

JDOM比JAXB的優點是導航:你可以用一個簡單的語句,比如"//my-elem"取一個元素深入到XML樹。使用JAXB,您將編寫一個barnful代碼和嵌套循環來獲得這個簡單的結果。

(更何況,如果沒有你的XML的XML模式,JAXB甚至不會和你說話。)

0

有時候JAXB可能是矯枉過正,和DOM是確定的幾個操作:

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