Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как обработать xml с помощью SAX 
:(
    Опции темы
AlexeyVorotnikov
Дата 13.12.2007, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 18.6.2007
Где: Москва

Репутация: 10
Всего: 18



Вообще, написание хендлера для SAX парсера задача довольно нетривиальная. Без знания теории конечных автоматов, на одной интуиции, написать его правильно затруднительно. Особенно, если и о структурах  данных понятия смутные. (Шутка smile )


--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
IUser
  Дата 13.12.2007, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 22.3.2007

Репутация: нет
Всего: нет



Да я только учусь, по этому смутное понятие обо всём( smile )

Добавлено через 1 минуту и 4 секунды
а это я пишу по примеру, сказали так писать, только пример упращён
PM MAIL   Вверх
Kangaroo
Дата 13.12.2007, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 21
Всего: 104



Цитата(AlexeyVorotnikov @  13.12.2007,  15:08 Найти цитируемый пост)
 Без знания теории конечных автоматов

Это как  smile  Что-то смутно помнится с первых курсов..
Или это 
Цитата(AlexeyVorotnikov @  13.12.2007,  15:08 Найти цитируемый пост)
(Шутка  )
 ?



--------------------
Lost....
PM MAIL MSN   Вверх
AlexeyVorotnikov
Дата 13.12.2007, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 18.6.2007
Где: Москва

Репутация: 10
Всего: 18



В каждой шутке есть доля шутки smile
Сейчас я попробую подправить программу и покажу, что получилось.


--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
Kangaroo
Дата 13.12.2007, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 21
Всего: 104



А у меня как? UserHandler из лабы моей по СаксПарсеру:
Код

public class UsersHandler extends DefaultHandler {
    
    public enum CurrentElement {
        LOGIN,
        PASSWORD,
        NAME,
        SURNAME,
        LAST_LOGIN_DATE,
        SHOW_NEWS,
        SHOW_CALENDAR,
        NO_ELEMENT
    }
    private static final List<String> elements = new ArrayList<String>(Arrays.asList("user", "login", "pass", "name", 
            "surname", "lastLoginDate", "showNews", "showCalendar")); 
    private static List<User> users;
    private CurrentElement currentElement;
    private int elementIndex;
    private User user;
    

    @Override
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        if (qName.equals("user")) {
            users.add(user);
            user = null;
        }
    }


    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        elementIndex = elements.indexOf(qName);
        switch (elementIndex) {
            case 0: { //user
                user = new User();
                if (attributes != null) {
                    user.setGroup(attributes.getValue("group"));
                }
                break;
            }
            case 1: { //login
                currentElement = CurrentElement.LOGIN;
                break;
            }
            case 2: { //pass
                currentElement = CurrentElement.PASSWORD;
                if (attributes != null) {
                    user.setEncryptionAlgorithm(attributes.getValue("enc"));
                }
                break;
            }
            case 3: { //name
                currentElement = CurrentElement.NAME;
                break;
            }
            case 4: { //surname
                currentElement = CurrentElement.SURNAME;
                break;
            }            
            case 5: { //last login date
                currentElement = CurrentElement.LAST_LOGIN_DATE;
                break;
            }
            case 6: { //show news
                currentElement = CurrentElement.SHOW_NEWS;
                break;
            }
            case 7: { //show calendar
                currentElement = CurrentElement.SHOW_CALENDAR;
                break;
            }
            default: {
                //nothing to do
            }            
        }
    }
    
    public void characters(char[] buf, int offset, int len) throws SAXException {
        SimpleDateFormat  simpleDateFormat = new SimpleDateFormat("dd.MM.yyyy", Locale.UK);
        String valueString = new String(buf, offset, len);
        switch (currentElement) {
         case LOGIN: {
             user.setLogin(valueString);
             break;
         }
         case PASSWORD: {
             user.setPassword(valueString);
             break;
         }
         case NAME: {
             user.setName(valueString);
             break;
         }
         case SURNAME: {
             user.setSurname(valueString);
             break;
         }
         case LAST_LOGIN_DATE: {
             try {
                    user.setLastLoginDate(simpleDateFormat.parse(valueString));
                } catch (ParseException e) {
                    //bad date
                }
             break;
         }
         case SHOW_NEWS: {
             user.setShowNews(valueString);
             break;
         }
         case SHOW_CALENDAR: {
             user.setShowCalendar(valueString);
             break;
         }
        }
    }
}




--------------------
Lost....
PM MAIL MSN   Вверх
IUser
Дата 13.12.2007, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 22.3.2007

Репутация: нет
Всего: нет



что делает строка

private static final List<String> elements = new ArrayList<String>(Arrays.asList("user", "login", "pass", "name",    
            "surname", "lastLoginDate", "showNews", "showCalendar")); 
PM MAIL   Вверх
Kangaroo
Дата 13.12.2007, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 21
Всего: 104



В startElement:
Код

elementIndex = elements.indexOf(qName);    
switch (elementIndex) {
...
}         

Чтобы использовать свитч для определения текущего нода. Иначе пришлось бы кучу if'ов писать.


--------------------
Lost....
PM MAIL MSN   Вверх
IUser
Дата 14.12.2007, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 22.3.2007

Репутация: нет
Всего: нет



что может означать ошибка
[Fatal Error] Internet.xml:2:3: The markup in the document preceding the root element must be well-formed.
org.xml.sax.SAXParseException: The markup in the document preceding the root element must be well-formed.
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
    at nshop.SAXSimple.main(SAXSimple.java:24)
document started
 Ошибка SAX-парсера
PM MAIL   Вверх
Kangaroo
Дата 14.12.2007, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 21
Всего: 104



IUser, а покажи Internet.xml Что-то в нем не well-formed


--------------------
Lost....
PM MAIL MSN   Вверх
IUser
Дата 14.12.2007, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 22.3.2007

Репутация: нет
Всего: нет



xml исправил, теперь вот что выдает

Exception in thread "main" java.lang.NullPointerException
    at nshop.ShopHandler.characters(ShopHandler.java:114)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.characters(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
    at nshop.SAXSimple.main(SAXSimple.java:24)
PM MAIL   Вверх
Kangaroo
Дата 14.12.2007, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 21
Всего: 104



Найди строчку:
Цитата

at nshop.ShopHandler.characters(ShopHandler.java:114)

Там у тебя где-то опять null pointer выскакивает...


--------------------
Lost....
PM MAIL MSN   Вверх
IUser
Дата 14.12.2007, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 22.3.2007

Репутация: нет
Всего: нет



из за чего это бывает?
PM MAIL   Вверх
Kangaroo
Дата 14.12.2007, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 21
Всего: 104



IUser, 
ну как это из-за чего. Обьект какой-нибудь у тебя null, а ты пытаешься вызвать метод его.

Например:
Код

Object o = null;
o.toString(); //NullPointerException



--------------------
Lost....
PM MAIL MSN   Вверх
Orange
Дата 8.5.2008, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 6.9.2004
Где: Russia, Moscow

Репутация: 4
Всего: 5



И вот это не понятно, зачем два раза подряд set

Код

if(qName.equals("client")){
       curr = new Client(); 
       curr.setDebtor(attrs.getValue(0));      
       curr.setDebtor(attrs.getValue(1)); 
  }


Добавлено через 6 минут и 26 секунд
Ооой! Я про SAX примеры искал и чего-то зачитался, на дату поста не посмотрел)))
--------------------
Пару дней назад я познакомился с мальчиком......
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0521 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.