4

I am currently parsing XML, but im not quite sure how to parse the "status" attribute of "message":

<message status="test"> <text>sometext</text> <msisdn>stuff</msisdn> </message>

Here is the code, i have cut off everything unnecessary:

NodeList nodeLst = doc.getElementsByTagName("message");

for (int s = 0; s < nodeLst.getLength(); s++) {

       Node fstNode = nodeLst.item(s);

       if (fstNode.getNodeType() == Node.ELEMENT_NODE) {

               Element fstElmnt = (Element) fstNode;

               NodeList numberNmElmntLst = fstElmnt
               .getElementsByTagName("msisdn");
               Element numberNmElmnt = (Element) numberNmElmntLst.item(0);
               NodeList numberNm = numberNmElmnt.getChildNodes();
               String phoneNumber = ((Node) numberNm.item(0))
               .getNodeValue().substring(2);

               NodeList txtNmElmntLst = fstElmnt
               .getElementsByTagName("text");
               Element txtNmElmnt = (Element) txtNmElmntLst.item(0);
               NodeList txtNm = txtNmElmnt.getChildNodes();
               String text = ((Node) txtNm.item(0)).getNodeValue();

               NodeList rcvNmElmntLst = fstElmnt
               .getElementsByTagName("received");
               Element rcvNmElmnt = (Element) rcvNmElmntLst.item(0);
               NodeList rcvNm = rcvNmElmnt.getChildNodes();
               String recievedDate = ((Node) rcvNm.item(0)).getNodeValue();
            }
}       

Can anyone guide me how this is done?

Thanks in advance.

JavaCake
  • 4,075
  • 14
  • 62
  • 125

2 Answers2

12

Node.getAttributes()

NamedNodeMap attributes = fstElmnt.getAttributes();

for (int a = 0; a < attributes.getLength(); a++) 
{
        Node theAttribute = attributes.item(a);
        System.out.println(theAttribute.getNodeName() + "=" + theAttribute.getNodeValue());
}

You could avoid traversing if you use XPATH to retrieve the data. Read this tutorial.

Aravind Yarram
  • 78,777
  • 46
  • 231
  • 327
2

I have been playing with Apache Xerces for parsing DOM. But it was horrible tasks. If you could, take a look at jsoup.

So, if your question has an answer in Jsoup, it would be:

node.attr("status")
  • I regret i did not do that, but unfortunately i cannot change much now, the application is very big. – JavaCake Feb 03 '12 at 17:50