2012-08-07 60 views
1

嗨配合我对属性的XML解析工作我的​​XML是XML解析

<CallLists> <CallList ID="1" Name="Name1" Desc="Ignore" CreatedOn="2/15/2011 1:48:30 PM" CreatedBy="def"> <CallList ID="2" Name="Name2" Desc="Agree" CreatedOn="3/8/2011 5:18:52 PM" CreatedBy="abc" > </CallLists> 

我要分析此XML,这样我可以得到属性值 作业我所做的是

用肥皂 //查看XML正在从服务器响应和遍历

viewXML(Responsedata.toString()); 



public void viewXML(String xmlStr) throws IOException { 
    try{ 
     byte[] xmlByteArray=xmlStr.getBytes(); 
     ByteArrayInputStream xmlStream=new ByteArrayInputStream(xmlByteArray); 
     InputStreamReader xmlReader=new InputStreamReader(xmlStream); 
     XmlParser parser=new XmlParser(xmlReader); 
     try{ 
      traverse(parser,""); 
     } 
     catch(Exception exc){ 
      exc.printStackTrace(); 
     } 
     return; 
    } 
    catch(IOException e){ 
     return; 
    } 
} 



    public void traverse(XmlParser parser,String indent) throws Exception{ 
    boolean leave=false; 
    String sValue=""; 
    do{ 
     ParseEvent event=parser.read(); 
     ParseEvent pe; 
     switch(event.getType()){ 
      case Xml.START_TAG: 
       if (event.equals("calllists")){ 

       } 
       if("ID".equals(event.getAttribute(0))){ 
        pe=parser.read(); 
        sValue=pe.getText()+"~~"; 

      } 
       if("Name".equals(event.getAttribute(1))){ 
        pe=parser.read(); 
        sValue=sValue+pe.getText()+"~~"; 
       } 

       if("Desc".equals(event.getAttributes())){ 
        pe=parser.read(); 
        sValue=sValue+pe.getText()+"~~"; 
       } 

       if("CreatedOn".equals(event.getAttributes())){ 
        pe=parser.read(); 
        sValue=sValue+pe.getText()+"~~"; 
       } 


       if("CreatedBy".equals(event.getName())){ 
        pe=parser.read(); 
        sValue=sValue+pe.getText()+"~~"; 
       } 
       traverse(parser,""); 
       break; 
      case Xml.END_TAG: 
       leave=true; 
       break; 
      case Xml.END_DOCUMENT: 
       leave=true; 
       break; 
      case Xml.TEXT: 
       break; 
      case Xml.WHITESPACE: 
       break; 
      default: 
     } 
    }while(!leave); 
} 

回答

1

后你使事情的方式复杂。

改为使用SAX,它是Android SDK的一部分here是一个很好的教程。

您还应该重点关注Default Handlerhere)。仔细看看这些方法:

startElement(String uri, String localName, String qName, Attributes attributes)

endElement(String uri, String localName, String qName)

characters(char[] ch, int start, int length)

+0

感谢名单伴侣对你的帮助,我会看着你的你的链接 – 2012-08-07 07:38:01

+0

对不起,我不能投票×最大我没有15式回购你看 – 2012-08-07 07:42:21

+0

如果你对答案满意,你可以接受它。 – Michal 2012-08-07 07:44:01

0

我会建议你使用SimpleXml,这是非常快,易于安装。

我用了超过3个应用和容易,因为1.2.3

Here Enjoy...