c++ - Qt XML 序列化添加额外的字符

标签 c++ xml qt serialization newline

我有一个使用 Qt 将自由文本输入序列化到 XML 节点的方法。此文本可能包含换行符。问题是当我序列化这个文本并再次反序列化它时,一些额外的换行符被插入到输出流中。

这是我的序列化方法:

QDomElement textElement = doc.createElement("Sql");
QDomText cdata = doc.createTextNode(m_sql);
textElement.appendChild(cdata);

这是我要序列化的文本:

CREATE FUNCTION func(a INT) RETURNS INT
BEGIN
     return 1;
END

这是我在序列化文件中得到的:

<Sql>CREATE FUNCTION func(a INT) RETURNS INT&#xd;&#xd;

BEGIN&#xd;&#xd;

   return 1;&#xd;&#xd;

END&#xd;&#xd;</Sql>

(我知道这看起来很糟糕,但是在 &#xd;&#xd; 之后有换行符,而这个编辑器无法显示它们,这就是为什么看起来两行之间有一个空行的原因。)

这是反序列化后得到的:

CREATE FUNCTION func(a INT) RETURNS INT


BEGIN


    return 1;


END

所以你可以看到换行符加倍了......任何线索如何解决它?

谢谢

最佳答案

打开文件进行阅读时尝试使用QIODevice::Text 标记。 来自 QFile 文档:

The QIODevice::Text flag passed to open() tells Qt to convert Windows-style line terminators ("\r\n") into C++-style terminators ("\n"). By default, QFile assumes binary, i.e. it doesn't perform any conversion on the bytes stored in the file.

关于c++ - Qt XML 序列化添加额外的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11205856/

相关文章:

c++ - 如何在 Linux 中跟踪 pthread 调度?

c++ - 在 Qt 项目中包含 zLib 的正确方法是什么?

c++ - 如何在qt中显示图像的预览?

qt - 检测 hiDPI 模式

c++ - std::holds_alternative 可变参数模板

c++如何将字符串数组转换为字符数组

c++ - 一个巨大数字的右边第二个数字

javascript - YQL 天气声明未显示某些物体,例如日出、日落和风寒

Javascript:如何通过元素名称而不是 XML 树位置查找子节点?

sql-server - 从 XML 列中选择所有 XML 节点