Я изучал Java SAX API.Я сделал свой собственный XML-канал, используя php.Вот документ XML
![enter image description here](https://i.stack.imgur.com/wT7cq.png)
Теперь, когда я хотел сделать вывод своего приложения на консоль, ничего не вышло.Я определил проблему с помощью метода endElement
в моем XMLHandler
, который расширяет DefaultHandler
.Вот моя реализация.
public void endElement(String uri, String localName, String qName) throws SAXException {
//I added the next three lines for debugging
System.out.println("Found End Element " + count + " times");
System.out.println("Localname = " + localName);
System.out.println("QName = " + qName);
super.endElement(uri, localName, qName);
if (this.currentItem != null){
if (localName.equalsIgnoreCase(me.osama.XMLParsing.BaseFeedParser.ITEMNAME)){
currentItem.setItemName(builder.toString());
} else if (localName.equalsIgnoreCase(me.osama.XMLParsing.BaseFeedParser.ITEMSITE)){
currentItem.setItemSite(builder.toString());
} else if (localName.equalsIgnoreCase(me.osama.XMLParsing.BaseFeedParser.ITEMNO)){
currentItem.setItemNo(builder.toString());
} else if (localName.equalsIgnoreCase(me.osama.XMLParsing.BaseFeedParser.ITEM)){
System.out.println(currentItem);
items.add(currentItem);
}
builder.setLength(0);
}
count++;
}
Оказывается, что localName
продолжал становиться пустым, поэтому условия никогда не выполнялись, и код никогда не входил в блок принятия решений.С другой стороны, qName
правильно вывел все имена, и как только я изменил переменную на qName
, тип коллекции List<Item> items
заполнил и работал правильно.
Я здесь, чтобы спросить, почему работает qName, а не localName?В то время как в руководстве IBM DeveloperWorks использовался канал RSS, localName
отлично сработал для него.
PS Это фид, используемый IBM Tutorial: http://www.androidster.com/android_news.rss