Russian Qt Forum
Май 17, 2024, 23:12 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt 4.3.0. Как перезаписать в XML файле определенный тег  (Прочитано 11287 раз)
5serg
Гость
« : Июль 24, 2007, 15:16 »

Проблема вот в чём.
Имеется XML файл. Каким образом найти в нём определенный тег и перезаписать в нем атрибут?
Использую DOM.
Записан
SABROG
Гость
« Ответ #1 : Июль 24, 2007, 16:00 »

Как это делается в libxml2 я могу сказать, а вот как в QtXml модуле я не знаю, мне кажется, что он слабоват.
Записан
5serg
Гость
« Ответ #2 : Июль 24, 2007, 16:16 »

Расскажите плиз по подробнее что за libxml2. Где его взять и желательно примерчик с ним
Записан
SABROG
Гость
« Ответ #3 : Июль 24, 2007, 16:31 »

http://en.wikipedia.org/wiki/LibXML
http://xmlsoft.org/index.html

Кросплатформенная библиотека для работы с xml файлами изначально написанная для оболочки Gnome.

На данный момент имеет встроенный ftp, http клиент и полный набор для работы не только с XMLем, но и HTMLем, реализовано докучи популярных алгоритмов для работы с xml'eм:

    * the XML standard: http://www.w3.org/TR/REC-xml
    * Namespaces in XML: http://www.w3.org/TR/REC-xml-names/
    * XML Base: http://www.w3.org/TR/xmlbase/
    * RFC 2396 : Uniform Resource Identifiers http://www.ietf.org/rfc/rfc2396.txt
    * XML Path Language (XPath) 1.0: http://www.w3.org/TR/xpath
    * HTML4 parser: http://www.w3.org/TR/html401/
    * XML Pointer Language (XPointer) Version 1.0: http://www.w3.org/TR/xptr
    * XML Inclusions (XInclude) Version 1.0: http://www.w3.org/TR/xinclude/
    * ISO-8859-x encodings, as well as rfc2044 [UTF-8] and rfc2781 [UTF-16] Unicode encodings, and more if using iconv support
    * part of SGML Open Technical Resolution TR9401:1997
    * XML Catalogs Working Draft 06 August 2001: http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
    * Canonical XML Version 1.0: http://www.w3.org/TR/xml-c14n and the Exclusive XML Canonicalization CR draft http://www.w3.org/TR/xml-exc-c14n
    * Relax NG, ISO/IEC 19757-2:2003, http://www.oasis-open.org/committees/relax-ng/spec-20011203.html
    * W3C XML Schemas Part 2: Datatypes REC 02 May 2001
    * W3C xml:id Working Draft 7 April 2004

Кстати прекрасно собирается через MinGW, разве что есть некоторые трудности с подключением zlib и iconv, но это решается.

Правда есть и подводные камни, то что отпарсит MSXML - может не отпарсить libxml2, разработчик говорит - придерживается стандартов. В общем возможны проблемы также как и с firefox'ом, там где сайты открываются в IE, могут не открываться в firefox'e. Нарушение стандарта.

Ну и по-умолчанию libxml2 работает с UTF-8, поэтому если собирать без iconv'a, то наши любимые xmlи с encoding="windows-1251" парсится не будут. Если же iconv есть, то xml отпарсится, но результат все-равно вернет в UTF-8 кодировке, т.ч. пугаться не надо.

А перезапись свойства осуществляется так:
- парсится файл
- возвращается указатель на древовидную структуру xml дерева
- проходим по дереву в поиске нужной нам ветки (ноды)
- передаем в метод xmlSetProp(нашу_ноду,имя_свойства,значение_свойства);
- сохраняем дерево в файл, если имя совпадает, то файл меняется, если нет, то создается новый.
Записан
bigirbis
Гость
« Ответ #4 : Июль 25, 2007, 09:13 »

Код:
QDomDocument doc;
doc.setContent( "path to file" );
QDomElement root = doc.documentElement();
QDomNodeList needList = root.elementsByTagName( "mytag" );
if( needList.count() )
{
 QDomElement needElement = needList.at( 0 );
 needElement.setAttribute( "myattribute", "123" );
}
...
... doc.toString() ...
...

Мануал стоит иногда почитывать
Записан
5serg
Гость
« Ответ #5 : Июль 25, 2007, 09:34 »

Вы меня простите, я новичок в программировании, а что надо потом сделать после
doc.toString() ...
как записать изменения обратно в файл?
Записан
bigirbis
Гость
« Ответ #6 : Июль 25, 2007, 10:13 »

Например так:
Код:
QFile f( "myfile" );
QTextStream s( &f );
f << doc.toString();


добавлено спустя 2 минуты:

 Но вообще - читай мануал и посты форума. Ведь это форум, а не чат. Здесь левый треп ни к чему.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.044 секунд. Запросов: 17.