Почему qName работает, а LocalName - нет? - PullRequest
2 голосов
/ 07 декабря 2011

Я изучал Java SAX API.Я сделал свой собственный XML-канал, используя php.Вот документ XML

enter image description here

Теперь, когда я хотел сделать вывод своего приложения на консоль, ничего не вышло.Я определил проблему с помощью метода 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

1 Ответ

2 голосов
/ 07 декабря 2011

В соответствии с SAX-пространством имен для Java API ,

По умолчанию программа чтения XML сообщит URI пространства имен и localName для каждого элемента, который принадлежит пространству именкак в начальном, так и в конечном обработчике.

Возможно, если вы добавите пространство имен в XML и определите свои элементы в этом пространстве имен, будет возвращено допустимое значение localName.В статье также упоминается, что при обработке пространства имен некоторые реализации возвращают empty qName.

...