Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > XML общие вопросы


Автор: DissDoc 31.5.2007, 14:19
Доброе время суток. Возникли вопросы по XML. Использую DocumentBuilderFactory
Собственно вопросы такие
1. Как перенести строки? Т.е. у меня  в моем случает получается так
Код

<test><a/><b/></test>

А мне надо чтобы было
Код

<test>
   <a/>
   <b/>
</test>

2. Заставить читать cp1251.Я нашел, что делается вот так
Код

OutputFormat format = new OutputFormat(doc, "windows-1251", true );
format.setIndenting(true);

а куда потом это прикручивать не знаю (((
3. Как мне добавить аттрибут к элементу? т.е чтобы было например так <a id='1'/>

Автор: Maksym 31.5.2007, 14:41
1. http://forum.vingrad.ru/forum/topic-106668/anchor-entry812103/0.html

Автор: LSD 1.6.2007, 14:03
Цитата(DissDoc @  31.5.2007,  15:19 Найти цитируемый пост)
Заставить читать cp1251.Я нашел, что делается вот так

Парсер сам разберется какая у XML документа кодировка, от тебя никаких дополнительных действий не требуется.


Цитата(DissDoc @  31.5.2007,  15:19 Найти цитируемый пост)
Как мне добавить аттрибут к элементу? т.е чтобы было например так <a id='1'/>

Смотря как ты обрабатываешь документ, для DOM так:
Код
DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = documentBuilder.newDocument();
Element element = document.createElement("root");
document.appendChild(element);
element.setAttribute("id", "1234");
element.setAttribute("lang", "ru");

Автор: DissDoc 10.6.2007, 18:21
Хорошо, но я так понял удалить элемент нереально с использованием только DocumentBuilderFactory?
Я набросал вариант через SAX. Т.е. читаем из файла выстаивая структуру XML и не записывая ненужных тегов. Но это глупо! Просто потому, что будь у меня XML на 15тыс строк и нуно было удалить тег какой-нить - пересобирать файл - очень глупое и ресурсоемкое зантие. Есть ли варианты удаления элемента/аттрибута с помощью DocumentBuilderFactory? Или же нужно еще что-то?
 smile  

Автор: nornad 10.6.2007, 22:49
Смотрим интерфейс Node (Element от него наследован) и видим до боли знакомый метод removeChild(Node). Остаётся только найти нужный элемент, взять его родителя (getParentNode()) и удалить его у родителя с помощью этого метода.
Только вот при использовании DOM-парсера у тебя весь XML документ всё равно будет загружен в память.
Подозреваю, что удалить прямо в файле можно при помощи наложения на исходный XML нужного XSLT-файла. Но, ввиду того, что с XSLT пока что не работал, не могу сказать, что и как делать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)