Название: Проблема при сохранении QDomDocument в файл Отправлено: sLiva от Февраль 07, 2008, 21:36 Читаю следующий XML файл:
<?xml version="1.0" encoding="utf-8"?> <test> <tag1> Test Test </tag1> <tag2>Test</tag2> <tag3>Test</tag3> <tag4>Test</tag4> <tag5> <![CDATA[ <body> <table> <tr> <td></td> </tr> </table> </body> ]]> </tag5> </test> Читаю стандартным образом: QDomDocument doc; QFile fileIn("test_in.xml"); if (!fileIn.open(QIODevice::ReadOnly | QIODevice::Text)) return; if (!doc.setContent(&fileIn)){ fileIn.close(); return; } Затем просто сохраняю этот QDomDocument в другой файл, тоже стандартным образом: QFile fileOut("test_out.xml"); if (!fileOut.open(QIODevice::WriteOnly | QIODevice::Text)) return; QTextStream out(&fileOut); out.setCodec("UTF-8"); doc.save(out, 4); На выходе получается вот такой файл: <?xml version='1.0' encoding='utf-8'?> <test> <tag1>
 Test 
 Test
 </tag1> <tag2>Test</tag2> <tag3>Test</tag3> <tag4>Test</tag4> <tag5><![CDATA[ <body> <table> <tr> <td></td> </tr> </table> </body> ]]></tag5> </test> В разделе CDATA появились лишние строки, в <tag1> появились 
 Еще и vs2005 ругается что типа файл имеет некорректные строковые разделители, и предлагает восстановить. Дебагом смотрел содержимое doc.toString(4); Все нормально Кто откликнется заранее спасибо :-)) ------ Если кому интересно, то проблема решена следующим образом: подсовывать дом документу не ссылку на файл а предварительно прочитать файл в КуСтринг, а затем уже только скармливать его дом документу. Если у кого есть другое решение, очень интересно... Название: Re: Проблема при сохранении QDomDocument в файл Отправлено: Вячеслав от Февраль 28, 2008, 11:38 А ради интереса QIODevice::Text выкинуть нафиг ?
Название: Re: Проблема при сохранении QDomDocument в файл Отправлено: sLiva от Февраль 29, 2008, 21:40 А ради интереса QIODevice::Text выкинуть нафиг ? Конечно же пробовал, ситуация такая, QIODevice::Text как грит асистент, при чтении заменяет переводы строки на \n а при записи заменяет \n на перевод строки под конкретную систему. Так вот если в XML не у одного тега содержащего CDATA нет то и с ним и без него никаких проблем нет, нО если раздел CDATA есть то поведение следующее: Когда указан QIODevice::Text появляются в CDATA пустые строки остальной XML нормальный Когда не указан то с CDATA все нормально а вот у остального XML переводы строки вообще отсутствуют. Вот такая вот дребедень :-))) а вообще при дебаге обратил внимание что при чтении XML в строку в разделе CDATA всеравно появляются \n\n мне кажется что при чтении переводы строки в ней считаются частью раздела, а потом еще и добавляется штатный перевод строки вот от куда и появляются два \n\n. Ну пока решение котрое я привел работает, незнаю что это баг, или специфика работы :-) Название: Re: Проблема при сохранении QDomDocument в файл Отправлено: ритт от Февраль 29, 2008, 22:20 если всё так, как ты описал, то баг, т.к. по спецификации содержимое цдата не должно модифицироваться при обработке дерева
не поленись и отпишись троллям с компилябельным примером (мне, например, лень даже проверять :) ) Название: Re: Проблема при сохранении QDomDocument в файл Отправлено: sLiva от Март 01, 2008, 00:26 если всё так, как ты описал, то баг, т.к. по спецификации содержимое цдата не должно модифицироваться при обработке дерева не поленись и отпишись троллям с компилябельным примером (мне, например, лень даже проверять :) ) Кстати я не указал версию - 4.3.0, может в посвежее версиях и нет такой проблемы, а проверить нет возможности, использую "некупленую" :-) версию под VS2005 а найти более свежую проблематично :-) Название: Re: Проблема при сохранении QDomDocument в файл Отправлено: Tonal от Март 02, 2008, 14:19 Начиная с 4.3.2 версия OpenSource нормально работаетс VS - так что бери любую. :-)
|