powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Читать xml-файл через сокет
18 сообщений из 18, страница 1 из 1
Читать xml-файл через сокет
    #38281159
else12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно получить xml-файл через сокет, распарсить его и послать данные дальше по цепочке. Вторая задача - получить данные из цепочки, сформировать xml-файл и передать его в сокет.

Опыта у меня не много, но дурацких вопросов много.

До этого я только из доставал данные файла. Я правильно понимаю отличие от того, что я делал : надо взять входной поток из сокета, а не из файла и передать в парсер?
2)В саксе START_ELEMENT - там начало любого тега - будь он даже внутри других тегов или я не правильно понимаю?
...
Рейтинг: 0 / 0
Читать xml-файл через сокет
    #38281206
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
else12распарсить его
Начни с парсера, т.к. это - БЛ.
Выбери парсер....посмотри его вход... а потом уже чисто технические вещи.
...
Рейтинг: 0 / 0
Читать xml-файл через сокет
    #38281262
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если XML маленький (до 50-100Кб)- возьмите любой удобный DOM парсер - JDOM, Dom4j.
Если XML достаточно большой - читайте про XML сериализацию XStream, JAXB.
Голые JSE SAX и DOM API достаточно не удобные. Лучше тогда StAX.
SAX вообще удобный только на чтение, для него есть клевая обертка Digester, но так как вам нужно не только парсить XML, но и формировать, вам в эту сторону пока можно не смотреть.
...
Рейтинг: 0 / 0
Читать xml-файл через сокет
    #38281327
else12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123else12распарсить его
Начни с парсера, т.к. это - БЛ.
Выбери парсер....посмотри его вход... а потом уже чисто технические вещи.
Я парсер уже частично написал - на стаксе. Потому что не понятно - если идет поток данных, то как его сразу в дом отправить. Но там есть вложенные теги - и у меня вопрос - отследить все их в START_ELEMENT я могу?
...
Рейтинг: 0 / 0
Читать xml-файл через сокет
    #38281372
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
else12Я парсер уже частично написал - на стаксе. Потому что не понятно - если идет поток данных, то как его сразу в дом отправить.
в jaxb нет ничего проще, даже в дом направлять не надо, сразу на выходе готовые данные
Код: java
1.
2.
3.
JAXBContext context = JAXBContext.newInstance(clazz);
Unmarshaller u = context.createUnmarshaller();
Clazz result = (Clazz)u.unmarshal(inputStream);


И в обратную сторону не сложнее.
Если заранее известна структура xml, и документы имеют вменяемый размер, зачем писать парсер, все уже готово.
А в саксе - да, START_ELEMENT будет вызываться на каждом элементе, и при рекурсивном заходе внутрь - тоже
...
Рейтинг: 0 / 0
Читать xml-файл через сокет
    #38281386
else12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanraelse12Я парсер уже частично написал - на стаксе. Потому что не понятно - если идет поток данных, то как его сразу в дом отправить.
в jaxb нет ничего проще, даже в дом направлять не надо, сразу на выходе готовые данные
Код: java
1.
2.
3.
JAXBContext context = JAXBContext.newInstance(clazz);
Unmarshaller u = context.createUnmarshaller();
Clazz result = (Clazz)u.unmarshal(inputStream);


И в обратную сторону не сложнее.
Если заранее известна структура xml, и документы имеют вменяемый размер, зачем писать парсер, все уже готово.
А в саксе - да, START_ELEMENT будет вызываться на каждом элементе, и при рекурсивном заходе внутрь - тоже
А есть чего почитать про jaxb на русском языке? Не порекомендуете?
...
Рейтинг: 0 / 0
Читать xml-файл через сокет
    #38281471
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
else12Потому что не понятно - если идет поток данных, то как его сразу в дом отправить
вы модульно делаете? Или конвейер глазной клиники Фёдорова?
Получите стрим-поток-файл весь, а потом парсите.
...
Рейтинг: 0 / 0
Читать xml-файл через сокет
    #38281488
else12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123else12Потому что не понятно - если идет поток данных, то как его сразу в дом отправить
вы модульно делаете? Или конвейер глазной клиники Фёдорова?
Получите стрим-поток-файл весь, а потом парсите.
Конвейер глазной клиники. Получаю команду в сокете(от меня при этом ждут быстрого ответа ), парсю, трансформирую в другой протокол, передаю данные по цепочке через другой сокет, получаю данные от цепочки, парсю, конвертирую, передаю xml-ответ. Иногда все команды бегут в противоположную сторону.
...
Рейтинг: 0 / 0
Читать xml-файл через сокет
    #38281492
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
else12Конвейер глазной клиники. Получаю команду в сокете(от меня при этом ждут быстрого ответа ), парсю, трансформирую в другой протокол, передаю данные по цепочке через другой сокет, получаю данные от цепочки, парсю, конвертирую, передаю xml-ответ. Иногда все команды бегут в противоположную сторону.
Но это всё отдельные XML команды, а не непрерывный поток XML. XML вообще по задумке не может быть непрерывным потоком.
...
Рейтинг: 0 / 0
Читать xml-файл через сокет
    #38281512
else12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczelse12Конвейер глазной клиники. Получаю команду в сокете(от меня при этом ждут быстрого ответа ), парсю, трансформирую в другой протокол, передаю данные по цепочке через другой сокет, получаю данные от цепочки, парсю, конвертирую, передаю xml-ответ. Иногда все команды бегут в противоположную сторону.
Но это всё отдельные XML команды, а не непрерывный поток XML. XML вообще по задумке не может быть непрерывным потоком.
Ну да. Просто насчет "получения данных, сохранения в файл, открытия файла" это что-то лишнее в моем случае. Или что такое "получить ФАЙЛ из сокета"? Я так понимаю, что мне надо открыть поток на чтение данных и передать его в парсер. Стакс - как я думал - вполне подходит под такую задачу. Я ошибался, все нужно делать не так? А как?
...
Рейтинг: 0 / 0
Читать xml-файл через сокет
    #38281523
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczНо это всё отдельные XML команды, а не непрерывный поток XML. XML вообще по задумке не может быть непрерывным потоком.
+1
термины:
- открыть сокет и получать поток-байты пока не кончится. Нижний уровень.
- Верхний уровень - получили буффер\поток как единое целое XML формата.
IMHO
...
Рейтинг: 0 / 0
Читать xml-файл через сокет
    #38281531
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
else12,
у тебя был термин - файл. Вот и складируй файлы в temp. А парсер их хабирает.
...
Рейтинг: 0 / 0
Читать xml-файл через сокет
    #38281677
else12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123else12,
у тебя был термин - файл. Вот и складируй файлы в temp. А парсер их хабирает.
Это я просто так выразился о том, что я раньше делал. А сейчас мне нужно принять данные из сокета и как можно быстрее их обработать. Я это себе представляю так, что я получаю данные из сокета во входной поток и передаю этот поток парсеру. Со стаксом я знаком, поэтому и использовал его. Но как-то сомневаюсь - а правильно ли я сделал или надо как-то по-другому?
...
Рейтинг: 0 / 0
Читать xml-файл через сокет
    #38281735
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
else12,
вот и разберись что ты принимаешь из сокета: файлы, потки байтов, склееные XML'ы и т.д.
...
Рейтинг: 0 / 0
Читать xml-файл через сокет
    #38281737
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вообще, жать в zip надо перед передачей
...
Рейтинг: 0 / 0
Читать xml-файл через сокет
    #38281805
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
там был класс Transformer который умеет парсить из/в inputstream.

глядите документацию по классам раелизующим javax.xml.transform.Source ну и вабще этот пакет
...
Рейтинг: 0 / 0
Читать xml-файл через сокет
    #38281908
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapok,

Не вводите в заблуждение, javax.xml.transform относится к XSLT, возможно он и пригодится чтобы трансформировать xml во что-то другое, но он не парсит xml.
...
Рейтинг: 0 / 0
Читать xml-файл через сокет
    #38282472
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да ничего я не путаю, пускай тс погуглит нормально. в гугле это было, на первых страницах. Там от Source наследуется конкретный класс - или строковый или потоковый источник, принципиальной разницы нет. И во что этот xml трансформировать тоже задается.

кстати вот

Код: java
1.
2.
3.
4.
5.
Source source = new DOMSource( mydocument );
File outFile = new File("myfile.xml");
Result result = new StreamResult(outFile);
TransformerFactory factory = TransformerFactory.newInstance();            
transformer.transform(source, result);



Собсно, тс-у надо смотреть на классы которые реализуют интерфейсы Source и Result, или в своем классе его реализовать. То есть в данном случае транформер перегоняет из dom в файловый поток, например.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Читать xml-файл через сокет
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]