У меня уйма времени на отладку классов-оболочек Android Sax. Мой вопрос в 2 раза. 1. Как вы выполняете отладку с помощью классов-оболочек Android Sax? 2. Что я здесь делаю не так?
У меня есть базовая программа для чтения RSS, которая отлично работает. Я пытаюсь создать программу чтения в формате Atom. У меня есть следующий код.
private List<Message> parseAtom()
{
final Message currentMessage = new Message();
final List<Message> messages = new ArrayList<Message>();
RootElement root = new RootElement("http://www.w3.org/2005/Atom", ATOM);
Element title = root.getChild(TITLE);
Element item = root.getChild(ENTRY);
title.setEndTextElementListener(new EndTextElementListener() {
public void end(String body)
{
Log.d("title", body);
}
});
item.setEndElementListener(new EndElementListener() {
public void end()
{
if (currentMessage.getAttribution() == null || currentMessage.getAttribution().length() == 0) currentMessage.setAttribution(Attribution);
messages.add(currentMessage.copy());
}
});
item.getChild(TITLE).setEndTextElementListener(new EndTextElementListener() {
public void end(String body)
{
currentMessage.setTitle(body);
}
});
item.getChild(ID).setEndTextElementListener(new EndTextElementListener() {
public void end(String body)
{
currentMessage.setLink(body);
}
});
item.getChild(SUMMARY).setEndTextElementListener(new EndTextElementListener() {
public void end(String body)
{
currentMessage.setDescription(body);
}
});
item.getChild(UPDATED).setEndTextElementListener(new EndTextElementListener() {
public void end(String body)
{
currentMessage.setDate(body);
}
});
item.getChild(Author).getChild(NAME).setEndTextElementListener(new EndTextElementListener() {
public void end(String body)
{
currentMessage.setAttribution(body);
}
});
try
{
String content = this.getInput();
Xml.parse(content, root.getContentHandler());
//Xml.parse(this.getInputStream(), Xml.Encoding.UTF_8, root.getContentHandler());
}
catch (Exception e)
{
throw new RuntimeException(e);
}
return messages;
}
Константы в вызовах getChild()
определены в базовом классе как:
static final String CHANNEL = "channel";
static final String PUB_DATE = "pubDate";
static final String DESCRIPTION = "description";
static final String LINK = "link";
static final String TITLE = "title";
static final String ITEM = "item";
static final String Author = "author";
static final String ENTRY = "entry";
static final String SUMMARY = "summary";
static final String ID = "id";
static final String UPDATED = "updated";
static final String NAME = "name";
Фид, который я использовал в качестве примера, выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
<title>NFL.com</title>
<link rel="alternate" href="http://www.nfl.com/rss/rsslanding" />
<link rel="self" href="http://www.nfl.com/rss/rsslanding" />
<subtitle>Latest news from NFL.com for Atlanta Falcons</subtitle>
<id>http://www.nfl.com/rss/rsslanding</id>
<rights>© 2012 NFL Enterprises LLC</rights>
<updated>2012-09-13T03:01:04Z</updated>
<dc:date>2012-09-13T03:01:04Z</dc:date>
<dc:rights>© 2012 NFL Enterprises LLC</dc:rights>
<entry>
<title>Brent Grimes to injured reserve with Achilles injury</title>
<link rel="alternate" href="http://www.nfl.com/goto?id=0ap1000000060448" />
<author>
<name>Hanzus, Dan</name>
</author>
<id>http://www.nfl.com/goto?id=0ap1000000060448</id>
<updated>2012-09-11T00:38:35Z</updated>
<published>2012-09-10T18:50:00Z</published>
<summary type="text">The Atlanta Falcons suffered a potentially devastating blow Monday with the news that cornerback Brent Grimes has played his last game of 2012. Who will step up in his absence?</summary>
<dc:creator>Hanzus, Dan</dc:creator>
<dc:date>2012-09-10T18:50:00Z</dc:date>
</entry>
</feed>
Когда это запускается, Xml.parse(content, root.getContentHandler());
возвращается, ничего не делая. Он не создает исключение. Но ни один из Listeners
никогда не срабатывал (проверено через контрольные точки). Парсер ничего не бросает в logcat.
Я добавил title
к корневому элементу, чтобы посмотреть, смогу ли я это сделать, но не пошел.
Первоначально у меня была проблема с синтаксическим анализатором, выдающим ошибку из-за отсутствия пространства имен (соответствовало feed
, ему было дано http://www.w3.org/2005/Atom:feed
из документа xml...вызванная ошибка). После добавления пространства имен он больше не выдает ошибку, но, похоже, ничего не делает.
Это моя первая попытка использовать обертки SAX (или, если уж на то пошло, sax). Я пропустил что-то простое?