Hello!
I have xml file that looks like this:
<ns:retrieveLastResponse>
<ns:return xsi:type="ax21:MinusEntry">
<ax21:entrydate>2010-07-02T17:29:35.492+02:00</ax21:entrydate>
<ax21:minus>true</ax21:minus>
<ax21:password>SECRET</ax21:password>
<ax21:text>Some text</ax21:text>
<ax21:username>John Doe</ax21:username>
</ns:return>
</ns:retrieveLastResponse>
I'm trying to parse it with sax like this:
try {
URL rssUrl = new URL("ADDRESS OF WS THAT RETURNS XML FILE");
SAXParserFactory mySAXParserFactory = SAXParserFactory.newInstance();
SAXParser mySAXParser = mySAXParserFactory.newSAXParser();
XMLReader myXMLReader = mySAXParser.getXMLReader();
RSSHandler myRSSHandler = new RSSHandler();
myXMLReader.setContentHandler(myRSSHandler);
InputSource myInputSource = new InputSource(rssUrl.openStream());
//InputSource myInputSource = new InputSource(rssUrl.openConnection().getInputStream());
myXMLReader.parse(myInputSource);
//result.setText(myRSSHandler.getMessages().get(0).getDesc());
result.setText(Integer.toString(myRSSHandler.getMessages().size()));
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
result.setText("Cannot connect RSS!");
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
result.setText("Cannot connect RSS!");
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
result.setText("Cannot connect RSS!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
result.setText("Cannot connect RSS!");
}
}
private class RSSHandler extends DefaultHandler
{
private List<Message> messages;
private Message currentMessage;
private StringBuilder builder;
public List<Message> getMessages(){
return this.messages;
}
@Override
public void startDocument() throws SAXException {
messages = new ArrayList<Message>();
builder = new StringBuilder();
}
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
// TODO Auto-generated method stub
if (localName.equalsIgnoreCase("ns:return")){
Log.d("XML","Zacetek xmla");
this.currentMessage = new Message();
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
super.endElement(uri, localName, qName);
if (this.currentMessage != null){
if (localName.equalsIgnoreCase("ax21:entrydate")){
Log.d("XML","Vstop v datum");
currentMessage.setDate(builder.toString());
} else if (localName.equalsIgnoreCase("ax21:minus")){
currentMessage.setMin(builder.toString());
} else if (localName.equalsIgnoreCase("ax21:text")){
currentMessage.setDesc(builder.toString());
} else if (localName.equalsIgnoreCase("ax21:username")){
currentMessage.setUser(builder.toString());
}
else if(localName.equalsIgnoreCase("ns:return")){
messages.add(currentMessage);
}
builder.setLength(0);
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
builder.append(ch, start, length);
}
But my list of messages is always empty, my log messages that are inside endElement and startElement are never displayed. How can i check if the program gets the xml file at all or am i parsing it incorectly?