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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> На эмуляторе и Нокии работает, на SE - нет 
:(
    Опции темы
Shushpanchik
Дата 21.8.2008, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 17.7.2007
Где: Россия, г. Пенза

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



Цитата

пример обработки хмл-ника с помощью kXML


Код

private void parseVersion(String strXml) {
//    strXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><info><version>1.0.1</version><message>Загрузи обновление и будет тебе щастье!</message><url>server.ru/midlet/midlet.jad</url></info>";
    KXmlParser parser = null;
    StringBuffer sbufError = null;
    boolean bVersion = false;
    boolean bMessage = false;
    boolean bUrl = false;
    boolean bInfo = false;
    boolean bError = false;
    String strVersion = null;
    String strMessage = null;
    String strUrl = null;
    int event;
    boolean bParse = true;
    try {
        byte[] bytXml = strXml.getBytes(DEF_ENC);
        ByteArrayInputStream bais = new ByteArrayInputStream(bytXml);
        parser = new KXmlParser();
        parser.setInput(bais, DEF_ENC);
        while (bParse) {
            event = parser.next();
            switch (event) {
                case XmlPullParser.START_TAG:
                    if (parser.getName().toLowerCase().equals(TAG_VERSION)) {
                        bVersion = true;
                        bInfo = false;
                    } else if (parser.getName().toLowerCase().equals(TAG_MESSAGE)) {
                        bMessage = true;
                        bInfo = false;
                    } else if (parser.getName().toLowerCase().equals(TAG_URL)) {
                        bUrl = true;
                        bInfo = false;
                    } else if (parser.getName().toLowerCase().equals(TAG_INFO)) {
                        bInfo = true;
                    } else if (parser.getName().toLowerCase().equals(TAG_ERROR)) {
                        bError = true;
                        sbufError = new StringBuffer();
                        for (int i = 0; i < parser.getAttributeCount(); i++) {
                            String strAttrName = parser.getAttributeName(i);
                            if (strAttrName.toLowerCase().equals(TAGATTR_ERR_CODE)) {
                                sbufError.append('#');
                                sbufError.append( parser.getAttributeValue(i) );
                                sbufError.append(": ");
                                break;
                            }
                        }
                    }
                    break;
                case XmlPullParser.END_TAG:
                    if (parser.getName().equals(TAG_INFO)) {
                        bParse = false;
                        m_strSrvVersion = strVersion;
                        m_strUpdMsg = strMessage;
                        m_strUpdUrl = strUrl;
                    } else if (parser.getName().equals(TAG_VERSION)) {
                        bVersion = false;
                    } else if (parser.getName().equals(TAG_MESSAGE)) {
                        bMessage = false;
                    } else if (parser.getName().equals(TAG_URL)) {
                        bUrl = false;
                    } else if (parser.getName().equals(TAG_ERROR)) {
                        bParse = false;
                        m_bError = true;
                        m_strErrMsg = sbufError.toString();
                    }
                    break;
                case XmlPullParser.TEXT:
                    if (bVersion) {
                        strVersion = parser.getText();
                        if (strVersion == null) {
                            m_bError = true;
                            m_strErrMsg = ERR_NOVALUE;
                            throw new XmlPullParserException(ERR_NOVALUE);
                        }
                    } else if (bInfo) {
                        String str = parser.getText();
                        if (str != null && !str.trim().equals("")) {
                            m_bError = true;
                            m_strErrMsg = str;
                            throw new XmlPullParserException(str);
                        }
                    } else if (bMessage) {
                        strMessage = parser.getText();
                        if (strMessage == null) {
                            m_bError = true;
                            m_strErrMsg = ERR_NOVALUE;
                            throw new XmlPullParserException(ERR_NOVALUE);
                        }
                    } else if (bUrl) {
                        strUrl = parser.getText();
                        if (strUrl == null) {
                            m_bError = true;
                            m_strErrMsg = ERR_NOVALUE;
                            throw new XmlPullParserException(ERR_NOVALUE);
                        }
                    } else if (bError) {
                        String strMsg = parser.getText();
                        if (strMsg == null)
                            strMsg = ERR_UNDEF_MSG;
                        else
                            sbufError.append(strMsg);
                    }
                    break;
                case XmlPullParser.END_DOCUMENT:
                    m_bError = true;
                    m_strErrMsg = ERR_UNEXP_END;
                    throw new XmlPullParserException(ERR_UNEXP_END);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
        System.out.println(strXml);
    }
}


Реально работающий кусок кода. В начале там есть строка strXml, в ней тот XML, который этим кодом парсится.

Цитата

Еще вставил-таки проверку чтобы getText не был null, но ничего не дало.


В случае, если у тебя XML выглядит так:
Код

<form>
<crt>
...

между событиями START_TAG на <form> и <crt> будет еще событие TEXT. И на него метод parser.getText() выдаст не null, а символы переноса строки и перевода каретки, т.е. "\r\n".
PM MAIL WWW ICQ   Вверх
AncleFedor
Дата 21.8.2008, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Shushpanchik, спасибо, попробую. 

PM MAIL   Вверх
AncleFedor
Дата 22.8.2008, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Новости с полей. С кодом мидлета я пока не работал, но попробовал парсить разные структуры хмл. Так вот, когда хмл-файл скомпонован в одну строку (без пробелов, табов и переводов строк), моя ошибка пропадает, но появляется "Неожиданный конец файла". Т.е. мои выводы: kXML на сонериках невероятно капризен, нужно учитывать многое, в том числе и то, что kXML воспринимает перевод строки как событие типа TEXT.

Расследование продолжается...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




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


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

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