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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как изменить атрибуты в XML файле? 
V
    Опции темы
lugaru
Дата 30.11.2011, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добрый день, помогите чайнику в XML решить задачу используя DOM


XML файл такого вида:
Код

<root>
    <row>
        <element id="1" text="000"/>
        <element id="2" text="0000"/>
        <element id="3" text="00000"/>
     </row>
....


Задача:
У меня не выходит изменить значения атрибутов, например в элементе с id="2"  хочу изменить значение атрибута text

Я так понимаю последовательность такая:
1) Изменить значение атрибута
2) Переписать  XML файл
правильно?

Если да то как это реализовать?

PM MAIL   Вверх
jk1
Дата 1.12.2011, 04:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

//читаем документ
Document doc = ...
//задаем значение атрибута
Element element = doc.getElementById("2");
element.setAttribute("text", "someNewValue");
// используем Transformer для записи файла
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new FileOutputStream(...));
transformer.transform(source, result);



--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
lugaru
Дата 1.12.2011, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(jk1 @ 1.12.2011,  04:06)
Код

//читаем документ
Document doc = ...
//задаем значение атрибута
Element element = doc.getElementById("2");
element.setAttribute("text", "someNewValue");
// используем Transformer для записи файла
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new FileOutputStream(...));
transformer.transform(source, result);

спасибо, попробую)
PM MAIL   Вверх
lugaru
Дата 1.12.2011, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(jk1 @ 1.12.2011,  04:06)
Код

//читаем документ
Document doc = ...
//задаем значение атрибута
Element element = doc.getElementById("2");
element.setAttribute("text", "someNewValue");
...

спасибо, немного переделал и заработало!)
PM MAIL   Вверх
rusJA
Дата 19.4.2018, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а с помощью SAX это возможно проделать? 
PM MAIL   Вверх
AntonSaburov
Дата 20.4.2018, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



SAX не хранит структуру XML в памяти. Теоретически можно "перегнать" данные из одного файла в другой, но с помощью StAX (не путать с SAX) и тогда можно в какой-то момент перехватить атрибут и поставить свой.
PM MAIL WWW ICQ   Вверх
rusJA
Дата 22.4.2018, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(AntonSaburov @  20.4.2018,  10:23 Найти цитируемый пост)
SAX не хранит структуру XML в памяти. Теоретически можно "перегнать" данные из одного файла в другой, но с помощью StAX (не путать с SAX) и тогда можно в какой-то момент перехватить атрибут и поставить свой

ну а что делать если документ большой? он же всю память съест, да и не лучшее решение грузить все в память.

Задание 1
Создать список персонала фирмы.
В фирме все работники делятся на следующие типы:
1) Работник:
 - ФИО
 - Дата рождения
 - Дата принятия на работу
2) Менеджер
 - ФИО
 - Дата рождения
 - Дата принятия на работу
 - Список работников в подчинении данного менеджера
3) Другие (руководство, секретари и т.д.)
 - ФИО
 - Дата рождения
 - Дата принятия на работу
 - Текстовое описание сотрудника
 
Список сотрудников должен позволять добавлять, удалять, изменять тип сотрудника, привязывать сотрудника к менеджеру, сортировать список по фамилиям, датам принятия на работу. Данные необходимо читать и писать в xml файл.

Требования к програмной реализации:
-    Приложение должно быть консольным
-    Для работы с XML необходимо использовать DOM
-    Входные данные (при добавлении сотрудника) должны читаться из текстового файла

Задание 2 (Дополнительное)
Миграция xml файла с данными из предыдущего задания в СУБД.
Требования к програмной реализации:
-    Приложение должно быть консольным
-    Для работы с XML необходимо использовать SAX
-    До начала работы программы в базе не должно быть таблиц
-    В качестве СУБД необходимо использовать MySQL



это на юниора, в задание 2 написано реализовать с помощью SAX вот и у меня возникла проблема как поменять тип сотрудника с помощью SAX



Это сообщение отредактировал(а) rusJA - 22.4.2018, 21:07
PM MAIL   Вверх
AntonSaburov
Дата 23.4.2018, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Так ты теперь о задании №2 ?
Так судя по всему тебе надо не работать с XML, а уметь перегонять из XML в базу. Это совсем другое - тут действительно можно пошагово обработать XML и уложить его данные в базу.

Тогда, на мой взгляд, тебе надо две части:
1. Уметь перегонять XML в базу - приче пункт об отсуствии таблиц вызывает вопрос - а структура XML заране известна или ее надо определять "на лету". Это тогда достаточно неудобная задача.
2. Уметь работать с базой.
PM MAIL WWW ICQ   Вверх
rusJA
Дата 23.4.2018, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



задание нашел из сети, выполняю его просто так.
как я понимаю база базой, а реализация реализацией. в первом задание выполнить все с помощью DOM, а втором здание как я понимаю DOM надо переписать на SAX вот и возник вопрос по поводу изменения типа сотрудника.
ну а по поводу базы, структура xml известна, да и есть примеры в сети как это реализовать 
PM MAIL   Вверх
AntonSaburov
Дата 23.4.2018, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Не надо переписывать DOM на SAX.
Реализация DOM в Java сама использует SAX-парсер для построения дерева. Для начала почитайте, что такое SAX. 
PM MAIL WWW ICQ   Вверх
rusJA
Дата 23.4.2018, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всё я теперь понял что тут имелось ввиду, чтоб реализовать миграцию.... а там уже SAX, вот что значит не правильно понял задачу, спасибо за прояснение ситуации
PM MAIL   Вверх
AntonSaburov
Дата 23.4.2018, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Молодцом, что догадались, что SAX может помочь просто "выкусывать" нужные куски информации и отправлять их с базу.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




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


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

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