Попробуйте что-нибудь вроде этого:
public class XmlParser extends DefaultHandler{
private static final int STATE_FEED = 0;
private static final int STATE_ID = 1;
private static int sDepth = 0;
private static int sCurrentState = 0;
private String mTheString;
public XmlParser(){}
@Override
public void startDocument() throws SAXException{}
@Override
public void endDocument() throws SAXException{}
@Override
public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException{
mTheString = "";
sDepth++;
if (qName.equals("feed")){
sCurrentState = STATE_FEED;
return;
}
if (qName.equals("id")){
sCurrentState = STATE_ID;
return;
}
sCurrentState = 0;
}
@Override
public void endElement(String namespaceURI, String localName, String qName) throws SAXException{
sDepth--;
switch (sCurrentState){
case STATE_FEED:
//Do something with the feed
sCurrentState = 0;
mTheString = "";
break;
case STATE_ID:
// Save the ID or do whatever
sCurrentState = 0;
mTheString = "";
break;
default:
//Do nothing
mTheString = "";
return;
}
mTheString = "";
}
@Override
public void characters(char ch[], int start, int length){
mTheString = mTheString + new String(ch, start, length);
}
}
Вы можете получить доступ к пользовательскому SAXParser с помощью чего-то вроде:
InputStream stream = //whatever your stream is (the document)
XmlParser handler = new XmlParser(); // your custom parser
XMLReader xmlreader = XMLReaderFactory.createXMLReader();
xmlreader.setContentHandler(handler);
xmlreader.parse(new InputSource(stream));
// Then you can create a method in the handler, like getResults to return the list of elements or something here.
Итак, вы передаетеваш пользовательский анализатор в Xml Reader, и получить результаты из источника.Во время синтаксического анализа XML обработчик начинает с «начального документа», затем выполняет итерации по элементам в XML (вызывая startElement в начале, endElement в начале).Между этими двумя функциями вызывается метод символов - выбор символов (который вы затем можете делать с тем, что хотите, в endElement).Синтаксический анализатор завершается, когда вызывается endDocument, так что вы можете настроить и разложить их в начале и конце элементов или всего документа, если хотите.
Надеюсь, это поможет, и близко к тому, что выс нетерпением жду.