- XML code
<?xml version="1.0" encoding="utf-8" ?> - <info> <status>ok</status> <error /> - <item> <uid>819789</uid> <show>好的</show> <email /> </item> </info> - <item> <uid>819780</uid> <show>好的2</show> <email>eee@222.com<email> </item> - <item> <uid>819720</uid> <show>好的3</show> </item> </info>
如果status为ok的情况下,就读取item的属性
采用org.w3c.dom解析.
刚学JAVA.在XML上就有问题了.上网找了些.呵呵.主要是对于例如<email /> 的值为空或者没有<email>这个节点要如何判断.
------解决方案--------------------
用android自带的解析器 SAX 解析起来速度非常快 而且挺简单的
如果解析status为ok 就设置一个boolean 因为SAX是逐行解析的 如果为TRUE的话 就解析下一个 如果是FALSE 就return 这样就可以了 看下sdk的文档
------解决方案--------------------
用SAX工厂类生成它 然后定义DefaultHandler 定义解析XML的规则
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
然后parser.pareser(xml的输入流,定义的解析规则handler);
------解决方案--------------------
直接上代码,用sax解析。
主要在startElement
characters
这两个函数里面做数据的操作。
- Java code
mButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { DefaultHttpClient client = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); HttpResponse response = null; try { response = client.execute(httpPost); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } String str = null; try { str = EntityUtils.toString(response.getEntity()); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } StringReader reader = new StringReader(str); InputSource source = new InputSource(reader); try { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser paser = factory.newSAXParser(); XMLReader xmlReader = paser.getXMLReader(); DecodeHandler handler = new DecodeHandler(); xmlReader.setContentHandler(handler); xmlReader.parse(source); } catch (Exception e) { // TODO: handle exception } } }); } public class DecodeHandler extends DefaultHandler{ @Override public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub super.ignorableWhitespace(ch, start, length); } @Override public void notationDecl(String name, String publicId, String systemId) throws SAXException { // TODO Auto-generated method stub super.notationDecl(name, publicId, systemId); } @Override public void processingInstruction(String target, String data) throws SAXException { // TODO Auto-generated method stub super.processingInstruction(target, data); } @Override public InputSource resolveEntity(String publicId, String systemId) throws IOException, SAXException { // TODO Auto-generated method stub return super.resolveEntity(publicId, systemId); } @Override public void startPrefixMapping(String prefix, String uri) throws SAXException { // TODO Auto-generated method stub super.startPrefixMapping(prefix, uri); } @Override public void unparsedEntityDecl(String name, String publicId, String systemId, String notationName) throws SAXException { // TODO Auto-generated method stub super.unparsedEntityDecl(name, publicId, systemId, notationName); } @Override public void warning(SAXParseException e) throws SAXException { // TODO Auto-generated method stub super.warning(e); } @Override public void characters(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub super.characters(ch, start, length); } @Override public void endDocument() throws SAXException { // TODO Auto-generated method stub super.endDocument(); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { // TODO Auto-generated method stub super.endElement(uri, localName, qName); } @Override public void endPrefixMapping(String prefix) throws SAXException { // TODO Auto-generated method stub super.endPrefixMapping(prefix); } @Override public void setDocumentLocator(Locator locator) { // TODO Auto-generated method stub super.setDocumentLocator(locator); } @Override public void skippedEntity(String name) throws SAXException { // TODO Auto-generated method stub super.skippedEntity(name); } @Override public void startDocument() throws SAXException { // TODO Auto-generated method stub super.startDocument(); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // TODO Auto-generated method stub super.startElement(uri, localName, qName, attributes); } }