为什么qName工作而LocalName没有?

时间:2011-12-07 18:19:47

标签: java xml sax

我正在学习Java SAX API。我使用php制作了自己的XML feed。这是XML文档

enter image description here

现在,当我想将我的应用程序输出到控制台时,没有出现任何问题。我在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正确地将所有名称都删除了,一旦我将变量更改为qNameqName集合类型就会填满并正常工作。

我在这里问为什么qName工作而不是localName?而IBM DeveloperWorks的教程使用了RSS源,List<Item> items完美地为他工作。

P.S。这是IBM Tutorial使用的提要:http://www.androidster.com/android_news.rss

1 个答案:

答案 0 :(得分:2)

根据SAX namespace for Java API

  

默认情况下,XML阅读器将报告名称空间URI和localName   对于属于命名空间的每个元素,在start和   结束处理程序。

也许,如果您向XML添加一个名称空间并在该名称空间中定义您的元素,它将返回一个有效的localName。本文还提到,通过命名空间处理,一些实现将返回 empty qName