2011-04-19 101 views
0

我已經閱讀了許多關於Android中XML解析的文章。但是,它們都只是沒有任何解釋的代碼。我是Android新手(甚至是Java),但是,我已經使用.NET很長一段時間了。所以請給我解釋一下幾類:需要幫助解釋XML解析的基礎

SAXParserFactory spf = SAXParserFactory.newInstance(); 
SAXParser sp = spf.newSAXParser(); 
XMLReader xr = sp.getXMLReader(); 

他們做什麼?

xr.parse(new InputSource(sourceUrl.openStream())); 

這解析來自Internet的XML文件。我如何解析res/raw中的XML文件?即使在SD卡中有一個XML文件?

在.NET中是否有像XMLDocument這樣的類?我該如何將XML文件寫入SD卡?

謝謝。

+0

你知道,我只是使用在它的完全是一個例子,如何做你想要什麼簡單的XML寫了一篇博客文章。它比使用SAXParser容易得多,請看一下:http://massaioli.homelinux.com/wordpress/2011/04/21/simple-xml-in-android-1-5-and-up/ – 2011-04-21 04:52:21

回答

1

前三行只是設置了XML解析器。解析器的變體是一個流解析器,它不需要完整的輸入作爲內存中的樹(這將是一個dom解析器),但它會讀取流過它的xml數據。

務必閱讀的東西從assets文件夾,你可以使用該代碼:

AssetManager assetManager = context.getAssets(); 
     try { 
      InputStream is = assetManager.open("1.xml"); 
      board = new Board(); 
      board.loadFromXmlInputStream(is); 
      is.close(); 

其中board.loadFromXmlInputStream(is);內部調用你的上述3行代碼,然後xr.parse(new InputSource(is)

見例如SampleView以上行和Board

請注意,上面的代碼不足以處理XML - 您還需要一些回調(如Board類中顯示的回調)。

作爲一種替代方案,您也可以使用DOM解析器,該解析器在內存中創建XML的樹形表示,然後您可以走。

+0

謝謝非常!你的例子很好。而DOM解析器與.NET的XMLDocument非常相似。現在我可以輕鬆使用XML。 – 2011-04-19 13:31:44

0

什麼可能會幫助您知道,您可以輕鬆地將包含XML的標準字符串傳遞到提供URL輸入流的XML Handler intsead中。這可能有助於在那裏你就想開從SD卡的一些XML字符串或任何文件等

你可以簡單地做這樣的事情:

xr.parse(new InputSource(Utils.stringToInputStream(xmlString))); 
我Utils.java文件類

簡單的方法來轉換字符串到的InputStream:

public static InputStream stringToInputStream(String str) throws UnsupportedEncodingException { 
    return new ByteArrayInputStream(str.getBytes("UTF-8")); 
} 

而且我知道你說你讀過很多教程,但我發現this tutorial非常有幫助。

希望幫助

+0

感謝您對字符串輸入的幫助。關於SAX,它有什麼優勢,而我們必須創建更多的處理程序類? – 2011-04-19 13:38:26

+0

我不是一個真正的專家來解釋SAX與DOM的優點,因爲我只使用了SAX。前一段時間我以前使用過一個SAX風格的解析器,所以對我來說很容易理解。基本上你的處理程序提供'startElement()','endElement()'和'characters()'回調。當處理程序通過XML解析時,它會調用回調函數inturn並將您的xml元素數據存儲到傳回給調用對象的對象或對象列表中。國際海事組織(IMO)如果你對DOM感到滿意,那麼堅持下去:)也許有人在兩個設計方面都有更好的經驗可以解釋VS的兩個? – wired00 2011-04-19 13:46:09