![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Alexandr87 |
|
||||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 9 Всего: 39 |
Есть некая xml структура, упрощенно выглядящая так. <request arg='qwerty'> <action arg1='power' arg2='4'> <doc dynArg1='power' dynArg2='clower' /> </action> </request> Теги <request> и <action> - имеют фиксированное число аргументов. Вид (аргументы, внутренние элементы) тега <doc> определяется на основе значения агрументов тега <action>. Предполагалось разбирать данную структуру - двумя парсерами (внутренним и внешним). Внешний парсит нужные агрументы тегов <request> и <action> и на их основе динамически подгружает нужный парсер (внутренний) для анализа внутренней структуры. Парсится InputStream. При создании внешнего Handler а, я передаю ему через конструктор ссылку на этот объект, так, чтобы он мог вызвать внутренний парсер, передав ему данную ссылку для разбора. Но в момент начала работы внутреннего парсера вылетает ошибка java.io.IOException: Bad file descriptor Не могу понять, то ли это SAXParser парсит сразу все, а не постепенно, то ли еще чего. примерный код
ошибка
Заранее благодарен. |
||||
|
|||||
| kashka |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 29.11.2004 Где: Wolfenbuettel, Ge rmany Репутация: 1 Всего: 1 |
XML файл неправильный. Попробуй ' на " заменить. И проверь dtd файл, может там что не подходит.
|
|||
|
||||
| Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 9 Всего: 39 |
про ddt в моем посте нет ни слова. Он не используется.
Какие могут быть альтернативные пути решения задачи. Или она не понятна. |
|||
|
||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 31 Всего: 132 |
Возможно возникновение такого исключения если у XML нет заголовка с указанием кодировки (тогда вероятно используется iso-8859-1), но при этом в документе имеются кириллические символы. Если заголовок поставить (если его нет, конечно)?
|
|||
|
||||
| Alexandr87 |
|
||||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 9 Всего: 39 |
итак xml.xml
А это точный код, в котором возникает вышеописанная ситуация.
|
||||
|
|||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Дык чтож ты хочешь! Ты же в DefaultHandler в обработчике тега, начинаешь парсить этот же файл из того же самого FileInputStream! Естественно он перемещает позицию в файле на конец файла, вот ты и получаешь ошибку.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 9 Всего: 39 |
Я просто думал - что он парсит файл последовательно - не все сразу, и останавливается на теге - на котором вызывает очередной метод DefaultHandler.
А как тогда можно попробовать? |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Никто не может гарантировать, что текущая позиция в InputStream будет соответсвовать тегу, скорее всего нет. Почти наверняка они используют буферизацию. Тем более процесс парсинга SAX парсером не остановить, пока он не дойдет до конца.
А зачем это вообще нужно? -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 9 Всего: 39 |
внутренняя часть, динамическая и парсится разными наследниками DefaultHandler, которые при обработке вытягивают нужные данные и записывают их куда следуют, но заранее не известен полный список возможных внутренних (динамических) структур, и в зависимости от значений полученных во внешней структуре, выбирается необходимый класс-парсер, который далее и обрабатывает данный кусок и делает все что на него возложили.
Или пояснить более детально? Есть ли альтернативные способы. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Использовать один DefaultHandler, а он в зависимости от полученных данных пусть вызывает соответсвующий обработчкик. Например это можно реализовать так: у умолчального обработчика есть Map в которой записано на каком теге какого обработчика надо вызвать, и есть поле текущий обработчик. Когда приходит тег и для него есть обработчик, то он делается текущим обработчиком. И далее когда происходят SAX события, вызывается именно текущий обработчик. После того как текущий обработчик завершил работу, он разрегистрируется в умолчальном обработчике и тот снова начинает обрабатывать события самостоятельно. P.S. А еще можно сделать не одного текущего обработчика, а стек. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Alexandr87 |
|
|||
![]() дыкий псых ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1459 Регистрация: 27.11.2004 Где: Алматы, Казахстан Репутация: 9 Всего: 39 |
Спасибо LSD. Что то мне кажется, что так и придется делать.
Хотя на мой взгляд, было бы удобнее если можно было запустить еще один парсер. Это сообщение отредактировал(а) Alexandr87 - 14.5.2006, 05:48 |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |