我正在學習Java SAX API。我使用php製作了自己的XML feed。下面是XML文檔爲什麼qName工作和LocalName沒有?
現在,當我想讓我的應用程序輸出到控制檯上一無所獲。我將問題指向XMLHandler
中的endElement
方法,該方法擴展了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
對他來說是完美的。
P.S.這是飼料中使用的IBM教程:http://www.androidster.com/android_news.rss
[API規範](http://docs.oracle.com/javase/1.4.2/docs/api/org/xml/sax/ContentHandler.html)說如果命名空間處理,localName將是空的沒有執行。 – srkavin
[本文](http://www.saxproject.org/namespaces.html)討論名稱空間處理。 – srkavin
@srkavin請發佈這個答案。它解決了這個謎團。謝謝 – prometheuspk