2014-01-09 69 views
1

我有一個XML格式的數據InputStream。沒有模式;任何有效的XML都可以提供給我的應用程序。我想要做的事情一樣計數的節點,在不同層次的計算屬性頻率等Unmarshall原始無模式XML

我希望能夠將XML數據編入的東西我可以在Java一起工作。數據量相對較小(100MB),所以我不擔心將它一次全部加載到內存中。我讀過的關於Jaxb的一切都告訴我需要生成數據直接映射到的Java類。但我不知道數據會是什麼樣子。我只知道它是XML。

是否有一個「生」解組的功能,如果我能得到某種嵌套的地圖結構,然後在「走動」我自己的XML文檔?

+3

不能解組隨機XML - 那會是什麼解組到什麼呢?您需要使用[JAXP](http://en.wikipedia.org/wiki/Java_API_for_XML_Processing)而不是JAXB。將XML讀入['Document'](http://docs.oracle.com/javase/7/docs/api/javax/swing/text/Document.html)。 –

+0

@BoristheSpider完美;我認爲我的誤解是「unmarshall」一詞的定義。如果這是我接受的答案。 –

回答

2

Avoid using non-standard methods如JDOM。正如評論中已經指出的那樣,你不能解開你的XML,因爲你不知道里面可以包含什麼。大致XML元素轉換爲類成員,因此如果事先不知道可能的元素(標記)名稱,則不可能用JAXB註釋定義一個類,這些註釋可以從XML轉換回來。

你的情況來計算節點和屬性,我會用SAX處理。你可以編寫一個簡單的SAX處理程序來計算它們(甚至爲每個元素/屬性名稱使用不同的計數器創建一個Hashmap,我不知道你確切的需要)。

「原始」樹結構是完全DOM樹(處理XML的其它標準方式)。

0

您當然可以使用JAXP並將XML解析爲Document,但使用更友好的Java API(如JDOM)可以提高生產效率。