2011-04-19 109 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