0

我想解析xml文件如下:

     <?xml version='1.0' encoding='UTF-8'?>
     <rsp status='ok'>
           <status_id>1111</status_id>
           <user_id>TwitUsername</user_id>
           <media_id>ZZ83F</media_id> 
      </rsp>

我使用 DOM 来解析文件 xml,如下所示:

public String getStatus()
    {       
    String status="";
    try {           
        InputStream is=this.getResources().openRawResource(R.raw.json);
        Document xmlDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(is);
        Element root = xmlDoc.getDocumentElement();         
        NodeList rsp = root.getElementsByTagName("rsp");            
        for(int i=0;i<rsp.getLength();i++)
        {
             Node curNode = rsp.item(i);
             // this tag is <study>, get `id` attribute first
             status=String.valueOf(((Attr)curNode.getAttributes().item(0)).getValue());              
        }

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SAXException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ParserConfigurationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }       
    return status;
}

但是getStatus方法返回 null。

4

2 回答 2

1

http://www.jondev.net/articles/Android_XML_SAX_Parser_Example

 @Override
    public void startElement(String namespaceURI, String localName, String qName, 
            Attributes atts) throws SAXException {
        if (localName.equals("rsp")) {
              System.out.println("The value of attribute 'status' is: " + atts.getValue("status"));
        }   
    } 
于 2012-06-06T06:55:37.257 回答
0

试试这个方法

public void getGeoLocation(Document doc)throws IOException {

    NodeList nodeList, nchild;
    Node currentNode, thisNode;
    nodeList = doc.getElementsByTagName("rsp");
    int length = nodeList.getLength();
    for (int i = 0; i < length; i++) {

        currentNode = nodeList.item(i);
        nchild = currentNode.getChildNodes();
        int clength = nchild.getLength();

        for (int j = 0; j < clength; j++) {

            thisNode = nchild.item(j);

            if ("rsp".equals(thisNode.getNodeName())) {

                        org.w3c.dom.Element e1 = (org.w3c.dom.Element) thisNode;
                        String status = e1.getAttribute("status");

            }
            if ("status_id".equals(thisNode.getNodeName())) {

                String status_id =  thisNode.getTextContent();
            }
            if ("user_id".equals(thisNode.getNodeName())) {

                String user_id =  thisNode.getTextContent();
            }
            if ("media_id".equals(thisNode.getNodeName())) {

                String media_id =  thisNode.getTextContent();
            }
        }
    }

}
于 2012-06-06T10:18:48.877 回答