in my app i am parsing an xml file. In the xml file i am having 50 tags of the same name question
, now i want to store all the tag named as question as an arra
You can use the DOM parser, here is a link to the DocumentBuilder class.
Once you use the parse
method out of DocumentBuilder
and get your Document
you can use a function like this to get the items as a NodeList
:
public static NodeList getNodesByName(Document doc, String nodeName)
{
Element docEle = doc.getDocumentElement();
NodeList list = docEle.getElementsByTagName(nodeName);
return list;
}
In your case you would pass in the Document object you created by parsing the XML and then question
as your nodeName
.
Once you have your NodeList, you can iterate through it using a for loop and the .item()
method.
if(list != null && list.getLength() > 0) {
for(int i = 0 ; i < list.getLength();i++) {
Element element = (Element)list.item(i);
String textVal = element.getFirstChild().getNodeValue();
//Once you get the value you can put it into your
//array or just use it here.
}
}
This answer seems easily adaptable to your needs. In the example the questions are stored in a map, but it is easy to change this to an ArrayList
or an array.
public class CustomHandler extends DefaultHandler {
private ArrayList<String> questionList;
private boolean questionBuffering;
private StringBuilder sb;
@Override
public void startDocument() throws SAXException {
questionList = new ArrayList<String>();
}
@Override
public void endDocument() throws SAXException {
}
@Override
public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
if (localName.equals("question")) {
questionBuffering = true;
}
}
@Override
public void characters(char ch[], int start, int length) {
if(questionBuffering) {
sb.append(ch, start, length);
}
}
@Override
public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
if (localName.equals("question")) {
questionBuffering = false;
questionList.add(sb.toString());
}
}
public ArrayList<String> getResult() {
return questionList;
};
}
}