需要帮助解释XML解析的基础
我已经阅读了许多关于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卡?
谢谢。
前三行只是设置了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的树形表示,然后您可以走。
谢谢非常!你的例子很好。而DOM解析器与.NET的XMLDocument非常相似。现在我可以轻松使用XML。 – 2011-04-19 13:31:44
什么可能会帮助您知道,您可以轻松地将包含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非常有帮助。
希望帮助
感谢您对字符串输入的帮助。关于SAX,它有什么优势,而我们必须创建更多的处理程序类? – 2011-04-19 13:38:26
我不是一个真正的专家来解释SAX与DOM的优点,因为我只使用了SAX。前一段时间我以前使用过一个SAX风格的解析器,所以对我来说很容易理解。基本上你的处理程序提供'startElement()','endElement()'和'characters()'回调。当处理程序通过XML解析时,它会调用回调函数inturn并将您的xml元素数据存储到传回给调用对象的对象或对象列表中。国际海事组织(IMO)如果你对DOM感到满意,那么坚持下去:)也许有人在两个设计方面都有更好的经验可以解释VS的两个? – wired00 2011-04-19 13:46:09
你知道,我只是使用在它的完全是一个例子,如何做你想要什么简单的XML写了一篇博客文章。它比使用SAXParser容易得多,请看一下:http://massaioli.homelinux.com/wordpress/2011/04/21/simple-xml-in-android-1-5-and-up/ – 2011-04-21 04:52:21