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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> XML: вставить DOM элемент на нужное место, XML и dom4j (но можно и посвежее) 
V
    Опции темы
_Y_
Дата 3.4.2010, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

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



Стал вот возиться-вспоминать работу с XML и не могу решить простую вроде проблему. 

Надо вставить элемент не в конец документа, а в середину, на место определенное или индексом или другим, уже имеющимся в документе, элементом. Собственно, стоит задача дополнения документа данными с одновременной сортировкой по значениям атрибутов, но это не главное.

Что-то ничего не получается. Работать пытаюсь с dom4j-1.6.1 но просто потому, что эта jar-библиотека нашлась на моем компе и, предположительно, ее-то я в древности и использовал. Но может сейчас уже есть что-то лучшее для работы с XML и DOM? Если да, то посоветуйте, пожалуйста. Проект пока только начат - заменить библиотеку будет не сложно.

Подскажите пожалуйста. Что-то нагуглить ничего толкового не удается.



--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
jk1
Дата 3.4.2010, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Вот небольшой пример, он открывает существующий документ, парсит и добавляет к тэгу target тег newTag.
Код

 DocumentBuilderFactory  dbf = DocumentBuilderFactory.newInstance();
 DocumentBuilder builder = dbf.newDocumentBuilder();
 Document document = builder.parse(new File("build.xml"));
 document.getElementsByTagName("target").item(0).appendChild(document.createElement("newTag"));



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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

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



jk1, спасибо, но я, видимо, неясно описал свой вопрос. 

Твой код находит заданный элемент по тэгу и индексу и присоединяет новый элемент к нему, то есть наращивает ветвь. Мне же надо сделать именно вставку, то есть вставить элемент между имеющимися на тот же уровень.

Кроме того, твой код создает новый элемент по названию тэга. Мне же надо присоединить уже готовый элемент.

Т.е. исходный документ:
Код

<documant>
    <rootElement>
        <elem attr="0" />
        <elem attr="2" />
        <elem attr="5" />
        <elem attr="8" />
    </rootElement>
</document>

Имеется уже готовый DOMElement
Код

        <elem attr="3" />

Нужно сделать
Код

<documant>
    <rootElement>
        <elem attr="0" />
        <elem attr="2" />
        <elem attr="3" />
        <elem attr="5" />
        <elem attr="8" />
    </rootElement>
</document>





--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
dobrolub
Дата 4.4.2010, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

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



посмотри на 

Node.insertBefore(Node newChild, Node refChild)
Node.replaceChild(Node newChild, Node oldChild)
Node.removeChild(Node child)

это похоже то, что тебе нужно

file:///Users/alex/Documents/javadoc/jse/docs/api/org/w3c/dom/Node.html#insertBefore(org.w3c.dom.Node,%20org.w3c.dom.Node)

Это сообщение отредактировал(а) dobrolub - 4.4.2010, 09:55
PM   Вверх
_Y_
Дата 6.4.2010, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

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



Спасибо. Так все и работает. Проблема была в попытке использовать dom4j, когда нужно было пользоваться "родным" w3c.dom.

Кстати, забрался на старую работу и посмотрел свои же старые исходники. Та же история.  В первых версиях возился с dom4j, а потом от него отказался. Не пора ли опять на Альцгеймера проверяться smile 


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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