![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| antsh |
|
|||
|
Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 72 Регистрация: 16.9.2005 Репутация: нет Всего: нет |
Сижу уже не первый час и никак не могу сообразить как мне забинтовать следующие выражения:
(Делаю XML parser) Найти все открывающие теги: <[всё кроме "?" или "/"]*> Найти все закрывающие теги: <// *> найти хедер: <?*?> Как вот эти 3 выражения оформить? |
|||
|
||||
| LSD |
|
||||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
1.
2.
3.
Только учти 2 вещи: - ты неверно описал регулярки для тегов (в частности пробелы в именах тегов не допустимы) - работать это будет гораздо медленней, чем стандартный 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. |
||||||
|
|||||||
| antsh |
|
|||
|
Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 72 Регистрация: 16.9.2005 Репутация: нет Всего: нет |
Что то не получается у меня ничего. Наверное что то не так делаю.
Вообщем у меня логика такая. 1) Открываю файл 2) Перегоняю содержимое в в другой файл и всё в одну строку. В итоге имею одну но очень большую строчку. 3) Работаю с этой строчкой. Используя String[] matches = input_line.split("<[^\\?/]+>"); для поиска всех открывающих тэгов. Но вот в результате ничего не получается. Что посоветуете изменить? |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
У меня все работает.
Приведи весь код, где ты перегоняешь данные из одно файла в другой. И кстати зачем ты это делаешь? -------------------- 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. |
|||
|
||||
| antsh |
|
||||
|
Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 72 Регистрация: 16.9.2005 Репутация: нет Всего: нет |
Проект в универе
|
||||
|
|||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
1. В состав JDK не входит класс TextReader
2. Я спрашивал почему, ты перегоняешь XML в одну строку? Regexp нормально работают с выражениями состоящими из нескольких строк. -------------------- 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. |
|||
|
||||
| antsh |
|
|||
|
Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 72 Регистрация: 16.9.2005 Репутация: нет Всего: нет |
Ну текст ридер это вообщем то не хитрая библиотека, собственно не так уж важна сама суть, с её помощь я всего лишь считыввааю строчку, а вот почему я использую одну строку - да потмоу что со строчкой удобней работать чем с несколькими строками, задаёшь искать символ и всё. Вообщем какой обычно метод для парсинга ХМЛ используется, как я понял мой не катит совсем
|
|||
|
||||
| LSD |
|
||||||||||||||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Можно было закачать данные из файла в один StringBuffer со всеми переводами строки и прочим. Если использовать SAX, то это будет происходить приблизительно так: SAX - это событийный парсер для XML, т.е. он последовательно читает и рабирает данные из входного потока (это может быть файл, сетевое соединение, или любой другой InputStream). Когда парсер находит структурный элемент (открывающий тег, закрывающий тег, и т.п.), он оповещает об этом слушателя, и передает ему в качестве параметра найденый элемент. Слушатель делает все необходимые операции для данного элемента. Работа с SAX выглядит приблизительно так: 1. Создаем свой обработчик событий, наследуя его от базового класса DefaultHandler, и переопределяем в нем нужные нам методы. Пусть нам надо занести данные из всех элементов <user> в ArrayList.
2. Создаем фабрику парсеров и создаем парсер:
3. Парсим файл указав в качестве аргумента свой обработчик:
4. Если надо, можно указать парсеру, проверять документ по схеме:
Примечание: это будет работать в JDK 1.5 и старше, в более младших версиях надо будет обновить JAXP. Все вместе: Берем такой файл:
Парсим его:
Получаем на выходе:
-------------------- 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. |
||||||||||||||||
|
|||||||||||||||||
![]()
|
| Правила форума "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. |