![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| check |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 610 Регистрация: 3.4.2006 Репутация: 2 Всего: 23 |
Возникла необходимость преобразовать xml-документ в другой формат(текстовый файл с разделителями). Для обработки XML решил использовать JAXP 1.2.
Для того чтобы начать с ним работать нужно скомпилировать исходники и получить следующий набор JAR-файлов
Как сказано в ридми, скачал apache-ant-1.7.0, создал переменную ANT_HOME, прописал там путь к каталогу Ant, из каталога JAXP запустил команду -ant jars Ответ: ant не является исполняемым файлом и т.д. |
|||
|
||||
| Tony |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: нет Всего: 12 |
Посмотри как правельно ти написал ANT_HOME. Там должна быть папка bin. Типа:
ANT_HOME = c:\ant PATH = %ANT_HOME%\bin Перегрузи компик. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Пропиши каталог %ANT_HOME%\bin в PATH.
-------------------- 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. |
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
А почему не XSLT? -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| check |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 610 Регистрация: 3.4.2006 Репутация: 2 Всего: 23 |
Как я понимаю, XSLT позволяет вывести XML в том или ином виде, но разве он может записать текст в файл?
|
|||
|
||||
| check |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 610 Регистрация: 3.4.2006 Репутация: 2 Всего: 23 |
Всё это сделал. Когда выполняю команду -ant jars, получаю ту же ошибку. Попробовал так
Добавлено @ 11:45 Но это означает что в переменных окружения все верно. |
||||||
|
|||||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
1. Проверь что в каталоге %ANT_HOME%\lib есть файл ant-commons-net.jar
2. Проверь что переменная ANT_HOME указывает именно на коневую папку ANT-а, а не на bin или еще куда. -------------------- 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. |
|||
|
||||
| check |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 610 Регистрация: 3.4.2006 Репутация: 2 Всего: 23 |
Оба пункта проверил.
ant-commons-net.jar есть. ANT_HOME=C:\Ant. |
|||
|
||||
| Tony |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: нет Всего: 12 |
Конечно может.ХМЛ + ХСЛТ = fajl HTML Это сообщение отредактировал(а) Tony - 29.1.2007, 13:35 |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Значит тебе понадобится еще Jakarta Commons Net, надо будет положить файл commons-net.jar в каталог %ANT_HOME%\lib.
Только зачем он понадобился, что написано в readme по поводу сборки JAXP, он что исходники пытается из сети качать? P.S. Ты не можешь перейти на JDK 1.5 и старше (там уже все встроено)? -------------------- 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. |
|||
|
||||
| check |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 610 Регистрация: 3.4.2006 Репутация: 2 Всего: 23 |
||||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
В JDK 1.5 встроен JAXP 1.3.
-------------------- 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. |
|||
|
||||
| check |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 610 Регистрация: 3.4.2006 Репутация: 2 Всего: 23 |
Какие классы надо импортировать для работы с SAX?
Не один из этих классов компилятор не находит. |
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
XSLT - это язык задания преобразований XML. Поэтому сам по себе он не занимается записью в файл. Это может сделать XSLT-процессор. А с помощью XSLT ты можешь преобразовать XML-ник в другой XML-ник, HTML, txt, PDF, fb2... Это сообщение отредактировал(а) batigoal - 29.1.2007, 16:27 -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| check |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 610 Регистрация: 3.4.2006 Репутация: 2 Всего: 23 |
||||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Не может этого быть, все эти классы есть в JDK 1.5 (они даже есть в JDK 1.4). Transforming XML Data with XSLT -------------------- 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. |
|||
|
||||
| check |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 610 Регистрация: 3.4.2006 Репутация: 2 Всего: 23 |
||||
|
||||
| check |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 610 Регистрация: 3.4.2006 Репутация: 2 Всего: 23 |
Решил все-таки делать через SAX.
Вот класс, который выводит названия всех тегов и заключенные в них текстовые значения
Строковые поля объявленные в начале - это значения нескольких тегов которые, предположим , меня интересуют(на самом деле их конечно больше). Далее я должен эти поля поместить в массив, а массив передать в конструктор класса, пишущего в файл. Это конечно приблизительная схема, имя txt-файла будет определятся именем XML-я.
Вопрос в том как организовать в методе characters() присвоение текстовых значений тегов соответсвующим переменным. То есть если тег называется <ИНН>, берем его значение и помещаем в inn, и так далее. |
||||
|
|||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
check, сделай через HashMap. Ключом будет "inn", значением - соответственно, его значение.
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| check |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 610 Регистрация: 3.4.2006 Репутация: 2 Всего: 23 |
Вроде бы они и извлекаются, но в файл пишутся переводы строки через запятую.
|
||||
|
|||||
| check |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 610 Регистрация: 3.4.2006 Репутация: 2 Всего: 23 |
Причина в том, что метод haracters()
вызывается для каждого тега и соответственно файл каждый раз перезаписывается тем что есть в массиве на данный момент. При последнем вызове, поскольку тег не подходит ни под одно из условий, массив пустой. Это сообщение отредактировал(а) check - 30.1.2007, 16:06 |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Сделай запись в файл в обработчике endDocument (), и перейди на DocumentHandler.
-------------------- 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. |
|||
|
||||
| check |
|
||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 610 Регистрация: 3.4.2006 Репутация: 2 Всего: 23 |
Я вспомнил про метод endDocument(). Запись в файл я поместил туда, тобы она происходила один раз при достижении конца документа.
Но переменные которым в методе characters() присвоены значения:
в endDocument() пусты. Соответственно массив тоже пуст, а в файл пишутся квадраты через запятую Провёл такой эксперимент. При объявлении присвоил переменным начальные значения
При этом если их вывести в самом методе characters(), они имеют нормальные значения взятые из xml-я. Добавлено @ 17:45
Первое уже сделал. Что такое DocumentHandler? Это сообщение отредактировал(а) check - 30.1.2007, 20:24 |
||||||||||
|
|||||||||||
| LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Вместо:
используй:
По поводу первой проблемы, посмотри под отладчиком метод characters() вообще вызывается. -------------------- 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. |
||||
|
|||||
| check |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 610 Регистрация: 3.4.2006 Репутация: 2 Всего: 23 |
Пришлось сделать так
В интерфейсе DocumentHandler нет метода parse(). Но ничего не изменилось. characters() вызывается
|
||||
|
|||||
| check |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 610 Регистрация: 3.4.2006 Репутация: 2 Всего: 23 |
Как сделать чтобы в файл добавлялись строки не пеезаписывая файл?
(да, плоховато я ещё знаю Java=)) Это нужно в любом случае, но я ещё чувствую, что это ключ к решению проблемы. Похоже на то, что метод characters() вызывается в любом случае более одного раза для каждого тега и при последнем вызове считывает то ли null, то ли перевод строки. Это сообщение отредактировал(а) check - 31.1.2007, 10:35 |
|||
|
||||
| check |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 610 Регистрация: 3.4.2006 Репутация: 2 Всего: 23 |
Нашел
Так и есть. Вот что пишется для в файл из такого тега: <СистемныйНомерМассиваПоручений>060-009-2006-00005</СистемныйНомерМассиваПоручений> Тег встречается в документе два раза
То есть получается - текст, потом два перевода строки. |
||||||
|
|||||||
| check |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 610 Регистрация: 3.4.2006 Репутация: 2 Всего: 23 |
Последовал совету - создал типизированный HashMap
Код теперь выглядит гораздо приятнее, хотя переводы строки в файл по-прежнему пишутся. Вопрос решён, большое спасибо! Это сообщение отредактировал(а) check - 31.1.2007, 23:22 |
||||
|
|||||
![]()
|
| Правила форума "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. |