Russian Qt Forum

Qt => XML => Тема начата: 17dufa от Октябрь 05, 2007, 10:38



Название: QDomDocument в текст
Отправлено: 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 в сеть
?


Название: Re: QDomDocument в текст
Отправлено: alexis от Октябрь 05, 2007, 11:00
Так как QDomDocument наследник QDomNode, то можно вызвать метод save(  QTextStream & str, int indent  )
курим мануалы


Название: Re: QDomDocument в текст
Отправлено: pastor от Октябрь 05, 2007, 12:30
createProcessingInstruction тебе в помощь :)

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


Название: Re: QDomDocument в текст
Отправлено: 17dufa от Октябрь 07, 2007, 18:39
Чем createProcessingInstruction лучше варианта QString str = QString::fromUtf16(L"<?.....") + doc.toString(); ?


Название: Re: QDomDocument в текст
Отправлено: pastor от Октябрь 07, 2007, 19:47
имхо, это костыль, а не решение. Чем ваш вариант лучше?

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

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


Название: Re: QDomDocument в текст
Отправлено: 17dufa от Октябрь 08, 2007, 11:13
createProcessingInstruction такой же костыль;)
2 костыля, по-моему равнозначных, мой мне кажется понятней вот и все. По хорошему должен быть вариант типа такого: QByteArray QDomDocument::toString( Encoding );
Хорошо, что мне надо Utf-8, а если бы был нужен Windows-1251 или еще какая фигня, надо было б переставлять словари и использовать QString::toLocal8Bit()?
В общем мое мнение: нормального решения этой проблемы не нашлось, есть как минимум 2 костыля, какой выбрать - дело каждого в отдельности, хотя если все будут использовать один метод, это послужит некой стандартизации костылей и это, наверно, хорошо, но в принципе все равно ужОс.


Название: Re: QDomDocument в текст
Отправлено: pastor от Октябрь 08, 2007, 17:20
Кодировка документа устанавливаеться в заголовке. Я привел код как его установить. Такого метода установки кодировки для xml я не видел в своей практике