Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/19: Рейтинг темы: голосов - 19, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 20.09.2013
Сообщений: 21

XML и Java. Как добавить "путсой" элемент

25.09.2013, 02:35. Показов 3884. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Суть - приложение должно загружать данные из БД в XML и обратно из XML в БД .

Это кусок xml файла.
XML
1
2
3
4
5
 <record>
        <depcode>HR</depcode>
        <depjob>Head</depjob>
        <description><empty></empty></description> // <-- Так я обозначаю пустое поле. 
    </record>
С этой конструкцией поле
Java
1
elem.getElementsByTagName("description").item(0).getChildNodes().item(0).getNodeValue();
равно null. Мне именно так и надо. Когда обрабатываю пустое поле без конструкции <empty></empty> выдает ошибку: java.lang.NullPointerException. В принципе, я в ручную добавила <empty></empty> и все ОК с выгрузкой из файла.

В чем, собственно, проблема. Когда я загружаю данные в файл, и встречается атрибут со значание NULL (такое нередко в БД) то после загрузки в файл, у меня xml выглядит так:
XML
1
2
3
4
5
<record>
       <depcode>HR</depcode>
       <depjob>Head</depjob>
       <description/> // <-- Это я вижу в загруженном файле.
</record>
Кусок кода:
Java
1
2
3
4
Element newElement=document.createElement("record");
Element subElement2 = document.createElement("description");
newElement.appendChild(subElement2);
subElement2.appendChild(document.createTextNode(""));
Как добавить элемент с пустым значением, чтобы он в xml отображался как <description><empty></empty></description>, а НЕ <description/>.
ИЛИ как обработать элемент <description/>, чтобы оно дало значение null?

Помогите, прошу!
Я в xml профан , если есть советы, то прошу излагать предельно понятным языком.

Сорри, если где-то напутала с терминологией.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.09.2013, 02:35
Ответы с готовыми решениями:

Как добавить обводку тексту? Java (XML)
Необходимо добавить обводку текста в адроид студии. Какие параметры использовать для этого? Можно ли сделать это все в xml файле?

Как правильно добавить xml и java файлы в проект?
Привет. Я новичок в Андроиде и Джава. Столкнулся с проблемой. Хочу создать дополнительный активити. Для этого, как я понимаю, надо создать...

C#, Xml.Linq Как добавить элемент?
Есть многомерный массив, как добавить xml элементы перечислив в цикле в нужное место? Здесь Resources добавляются на одном уровне...

32
78 / 78 / 9
Регистрация: 28.10.2011
Сообщений: 219
25.09.2013, 18:25
А так ?
Java
1
2
3
4
Element newElement=document.createElement("record");
Element subElement2 = document.createElement("description");
newElement.appendChild(subElement2);
subElement2.appendChild(document.createTextNode("<empty></empty>"));
Добавлено через 12 минут
Ну или так в случае с <description/>

Java
1
2
3
if (!elem.getElementsByTagName("description").hasAttributes()) {
     делаем то что нада в случае пустого <description/>
}
1
0 / 0 / 0
Регистрация: 20.09.2013
Сообщений: 21
25.09.2013, 21:28  [ТС]
Первый вариант не подходит, т.к. он просто добавляет строку такую.
Насчет второго, да, действительно помогло, только я еще ночью додумалась)) Но все равно спасибо.

Кстати, как добавить запись в конец xml файла? а то у меня перезаписывает файл, а мне нужно именно добавлять.
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
26.09.2013, 11:00
Цитата Сообщение от Kamila_ Посмотреть сообщение
Кстати, как добавить запись в конец xml файла? а то у меня перезаписывает файл, а мне нужно именно добавлять.
А Вы уверены, что при добавлении получите валидный XML? Вам же, небось, надо внутрь корневого элемента добавлять?
0
78 / 78 / 9
Регистрация: 28.10.2011
Сообщений: 219
26.09.2013, 15:33
Можете привести пример структуры которой нада получить. Тестовой какой нибуть. что было в xml файле в начале и что вы хотите получить после "добавления в конец". Так как , соглашусь со Skipy, в xml должен быть корневой элемент и всё должно помещаться внутри него, а не с наружи.
0
0 / 0 / 0
Регистрация: 20.09.2013
Сообщений: 21
26.09.2013, 23:49  [ТС]
Цитата Сообщение от Skipy Посмотреть сообщение
А Вы уверены ... ?
Неа, не уверена. Я примерно представляю, как все должно выглядеть, и делаю метод проб и ошибок. По теме, не знаю как, но все уже заработало.

Добавлено через 17 минут
Цитата Сообщение от Kamila_ Посмотреть сообщение
Неа, не уверена. Я примерно представляю, как все должно выглядеть, и делаю метод проб и ошибок. По теме, не знаю как, но все уже заработало.
И еще вопрос. Можно ли как-то проверить xml файл на наличие записей? Можно ведь создать абсолютно "чистый" файл. Может, какая-то проверка есть?
0
78 / 78 / 9
Регистрация: 28.10.2011
Сообщений: 219
27.09.2013, 10:36
Используйте dtd определение.
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
27.09.2013, 10:38
Цитата Сообщение от Kamila_ Посмотреть сообщение
Можно ли как-то проверить xml файл на наличие записей? Можно ведь создать абсолютно "чистый" файл. Может, какая-то проверка есть?
если вас не смущает JAXB то можно воспользоваться ею
https://www.cyberforum.ru/blog... g1091.html
в последнем коменте ответ как валидировать хмл по схеме
0
78 / 78 / 9
Регистрация: 28.10.2011
Сообщений: 219
27.09.2013, 11:13
Если без JAXB, а обычным DOM то ТУТ отличный как по мне пример.

Ну и по DTD ссылочка

Добавлено через 7 минут
Ну а вообще если докумен не содержит XML то при попытке его распарсить методом DocumentBuilder.parse у Вас свалится SAXException
0
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
27.09.2013, 12:03
DTD уже маленько obsolete, лучше использовать http://www.w3.org/XML/Schema
ну и принцип валидации в DOM и JAXB одинаковый, так как JAXB основан на DOM, просто малёха покруче )
это как ORM для SQL, так и JAXB для XML
0
78 / 78 / 9
Регистрация: 28.10.2011
Сообщений: 219
27.09.2013, 12:30
Та никто ж и не спорит что технология устарела =)
0
0 / 0 / 0
Регистрация: 20.09.2013
Сообщений: 21
27.09.2013, 16:33  [ТС]
Т.е. валидация обязательна перед, например, выгрузкой из файла? Мне, кстати, именно DOM надо использовать.

И еще вопрос, как средствами Java создать хмл файл? Например, я делаю загрузку в файл,а этот файл еще не создан. Возможно ли его создать, а потом уже начать с ним работу? Где про такое почитать?)
0
 Аватар для chizz
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
27.09.2013, 16:37
Цитата Сообщение от Kamila_ Посмотреть сообщение
И еще вопрос, как средствами Java создать хмл файл?
Есть два пути:

1. использовать DOM. http://www.mkyong.com/java/how... -java-dom/
2. Просто строками. (XML это просто определенным образом структурированный текст)
0
0 / 0 / 0
Регистрация: 20.09.2013
Сообщений: 21
27.09.2013, 16:51  [ТС]
Цитата Сообщение от chizz Посмотреть сообщение
Есть два пути:

1. использовать DOM. http://www.mkyong.com/java/how... -java-dom/
2. Просто строками. (XML это просто определенным образом структурированный текст)
И что? Код по первой ссылке записывает данные в уже существующий файл. А мне нужно, чтобы файл создавался по необходимости, если это возможно.
0
78 / 78 / 9
Регистрация: 28.10.2011
Сообщений: 219
27.09.2013, 16:53
Цитата Сообщение от Kamila_ Посмотреть сообщение
Т.е. валидация обязательна перед, например, выгрузкой из файла?
Ну как бы не обязательна но желательна, так как парсер свалится с иксепшином если получит на вход не валидный xml и если этот иксепшин ещё криво обрабатывается, то может в результате вся система рухнуть. Например вы получаете xml из интернета, а у вас отвалилась сеть на середине получения данных и вместо того что бы попробовать подключится снова система рушится.... с ужасным иксепшином пугая пользователей программы.
0
 Аватар для chizz
993 / 521 / 102
Регистрация: 19.03.2013
Сообщений: 3,114
Записей в блоге: 19
27.09.2013, 16:57
Цитата Сообщение от Kamila_ Посмотреть сообщение
Код по первой ссылке записывает данные в уже существующий файл.
Ну так в чем проблема ?
1
78 / 78 / 9
Регистрация: 28.10.2011
Сообщений: 219
27.09.2013, 17:01
Цитата Сообщение от Kamila_ Посмотреть сообщение
И что? Код по первой ссылке записывает данные в уже существующий файл. А мне нужно, чтобы файл создавался по необходимости, если это возможно.
Вообще то файл создаётся новый в этой строчке :
Java
1
StreamResult result = new StreamResult(new File("C:\\file.xml"));
внутри StreamResult.
Но если вы хотите вообще вообще управлять файловым выводом, то тогда вам хмл прийдётся писать внутрь String и потом записывать уже всё в файл. Ну или пользоватся какими нибуть сторонними библиотеками. Так как через DOM в примере указан единственный способ вывода хмл.
0
0 / 0 / 0
Регистрация: 20.09.2013
Сообщений: 21
27.09.2013, 17:08  [ТС]
Цитата Сообщение от chizz Посмотреть сообщение
Ну так и надо было сразу)) Пишу же, что профан я, кучу всего не знаю еще.

Добавлено через 5 минут
Цитата Сообщение от warloc69 Посмотреть сообщение
Вообще то файл создаётся новый в этой строчке :
Java
1
StreamResult result = new StreamResult(new File("C:\\file.xml"));
Я не знаю, как и почему, но вся соль заключалась в строках:

Java
1
2
try {xmlFile.createNewFile();}
catch (Exception err) {}
Добавила, и получилось то, что надо)
Я мб просто не совсем корректно мыслю выражаю. уж простите(
0
78 / 78 / 9
Регистрация: 28.10.2011
Сообщений: 219
27.09.2013, 17:13
Цитата Сообщение от Kamila_ Посмотреть сообщение

Java
1
2
try {xmlFile.createNewFile();}
catch (Exception err) [COLOR="Red"]{}[/COLOR]
Пустые строчки после catch (Exception) НЕ ОСТАВЛЯЙТЕ , это признак больших проблем в будущем. добавть хоть бы вывод стектрейса

Java
1
2
3
4
try {xmlFile.createNewFile();}
catch (Exception err) {
System.out.println(err);
}
Потому что если у вас файл не откроется, скажем изза того что прав на запись нет, вы об этом даже не узнаете т когда програма свалится , вы будете ооочень долго искать место проблемы.
2
0 / 0 / 0
Регистрация: 20.09.2013
Сообщений: 21
27.09.2013, 17:31  [ТС]
Цитата Сообщение от warloc69 Посмотреть сообщение
Ну как бы не обязательна но желательна, так как парсер свалится с иксепшином если получит на вход не валидный xml и если этот иксепшин ещё криво обрабатывается, то может в результате вся система рухнуть. Например вы получаете xml из интернета, а у вас отвалилась сеть на середине получения данных и вместо того что бы попробовать подключится снова система рушится.... с ужасным иксепшином пугая пользователей программы.
А если попытаться валидировать пустой файл с расширение .xml, то что будет в результате? Ошибка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.09.2013, 17:31
Помогаю со студенческими работами здесь

Как добавить в родительский элемент, другие элементы (XML)
Есть вот так: &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;head&gt; &lt;parent folder=&quot;new folder&quot; color=&quot;Aqua&quot;&gt; &lt;note...

Может ли js добавить элемент в файл XML так, чтобы он записался в сам XML-файл?
Всем привет! Подскажите, может ли как-то javascript добавить элемент в файл XML так, чтобы он записался в сам XML-файл?

Добавить элемент в XML
Есть таблица, которая имеет поле с типом XML. XML имеет следующий вид: &lt;root&gt; &lt;Personals&gt; &lt;Person&gt; &lt;FIO&gt;?.?....

Добавить node в элемент (XML)
Имеется следующая структура xml: &lt;Test&gt; &lt;Question id=&quot;1&quot; Type=&quot;1&quot;&gt; &lt;Text&gt;Ваше имя?&lt;/Text&gt; &lt;Answer id=&quot;1&quot;...

Linq и xml (добавить элемент)
Здравствуйте, помогите пожалуйста люди добрые. Имеется xml файл со следующим ветвением: &lt;root&gt; &lt;car...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru