我正在学习Java SAX API。我使用php制作了自己的XML feed。这是XML文档
现在,当我想将我的应用程序输出到控制台时,没有出现任何问题。我在endElement
扩展XMLHandler
的{{1}}方法中查明了问题。这是我的实现。
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
集合类型就会填满并正常工作。
我在这里问为什么qName工作而不是localName?而IBM DeveloperWorks的教程使用了RSS源,List<Item> items
完美地为他工作。
P.S。这是IBM Tutorial使用的提要:http://www.androidster.com/android_news.rss
答案 0 :(得分:2)
默认情况下,XML阅读器将报告名称空间URI和localName 对于属于命名空间的每个元素,在start和 结束处理程序。
也许,如果您向XML添加一个名称空间并在该名称空间中定义您的元素,它将返回一个有效的localName
。本文还提到,通过命名空间处理,一些实现将返回 empty qName
。