XML解析属性

时间:2012-08-07 07:30:36

标签: android xml parsing

嗨Mates我正在进行xml解析属性my 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,以便我可以获取属性值 我做的家庭作业是

使用soap从SERVER获得响应后 //查看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);
}

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

我建议您使用SimpleXml,安装起来非常快捷。

我使用它超过3个应用程序,简单易用为1.2.3

Here Enjoy...