专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Android

简单解析XML解决方案

发布时间:2010-05-30 10:53:41 文章来源:www.iduyao.cn 采编人员:星星草
简单解析XML
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一定要BaseFeedParser嘛?
这样有什么好处呢?
不能直接就new 一个对象.然后读取某个字节的数据这样吗?
看了好多.有点晕.呵呵.

------解决方案--------------------
直接上代码,用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);
        }
        
    }
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: