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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QDomDocument в текст  (Прочитано 10226 раз)
17dufa
Гость
« : Октябрь 05, 2007, 10:38 »

Здраствуйте,
по поиску не нашел, решил создать новую тему
Как перевести QDomDocument в текст заданной кодировки (нужен Utf-8) c xml заголовком?
Сейчас делаю так:
Код:
QDomDocument doc;
//заполенение xml документа
QString str = doc.toString();
QByteArray arr = str.toUtf8();
//отправление arr в сеть
Но при этом в полученном тексте отсутвует xml заголовок (<?xml version="1.0" encoding="UTF-8"?>) а нужно, чтоб он был, причем желательно, чтобы поле encoding заполнялось автоматически по заданию кодировки результирующего текста. Можно это сделать? или просто изменть код так:
Код:
QDomDocument doc;
//заполенение xml документа
QString str = QString::fromUtf16(L"<?xml version=\"1.0\" encoding=\"UTF-8\"?>") + doc.toString();
QByteArray arr = str.toUtf8();
//отправление arr в сеть
?
Записан
alexis
Гость
« Ответ #1 : Октябрь 05, 2007, 11:00 »

Так как QDomDocument наследник QDomNode, то можно вызвать метод save(  QTextStream & str, int indent  )
курим мануалы
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #2 : Октябрь 05, 2007, 12:30 »

createProcessingInstruction тебе в помощь Улыбающийся

Код:
QDomDocument doc;
QDomNode node = doc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"" + <your codec name> + "\"");
doc.insertBefore(node, doc.firstChild());
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
17dufa
Гость
« Ответ #3 : Октябрь 07, 2007, 18:39 »

Чем createProcessingInstruction лучше варианта QString str = QString::fromUtf16(L"<?.....") + doc.toString(); ?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #4 : Октябрь 07, 2007, 19:47 »

имхо, это костыль, а не решение. Чем ваш вариант лучше?

createProcessingInstruction гарантирует, что в вашем xml-файле будет содержиться заголовок

Советую пересмотреть свое мнение
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
17dufa
Гость
« Ответ #5 : Октябрь 08, 2007, 11:13 »

createProcessingInstruction такой же костыль;)
2 костыля, по-моему равнозначных, мой мне кажется понятней вот и все. По хорошему должен быть вариант типа такого: QByteArray QDomDocument::toString( Encoding );
Хорошо, что мне надо Utf-8, а если бы был нужен Windows-1251 или еще какая фигня, надо было б переставлять словари и использовать QString::toLocal8Bit()?
В общем мое мнение: нормального решения этой проблемы не нашлось, есть как минимум 2 костыля, какой выбрать - дело каждого в отдельности, хотя если все будут использовать один метод, это послужит некой стандартизации костылей и это, наверно, хорошо, но в принципе все равно ужОс.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #6 : Октябрь 08, 2007, 17:20 »

Кодировка документа устанавливаеться в заголовке. Я привел код как его установить. Такого метода установки кодировки для xml я не видел в своей практике
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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