c++ - Qt中如何编辑XML文档的结尾(writeEndDocument)?

标签 c++ xml qt

我写了一个通讯录小程序,联系人保存在xml文件中。这是代码的一部分

void new_engine::main_window::write_to_db(const QString& n, const QString& s)
{
    QFile m_db_file(m_db_path);
    QString t("User");
    m_db_file.open(QIODevice::Append);
    QXmlStreamWriter wxml(&m_db_file);
    wxml.setAutoFormatting(true);
    if(m_size == 1)
    {
        wxml.writeStartDocument();
        wxml.writeStartElement("Persons");
    }
    wxml.writeStartElement(t);
    QString id = QString::number(m_size);
    wxml.writeAttribute("id", id);
    wxml.writeTextElement("Name", n);
    wxml.writeTextElement("Surname", s);
    wxml.writeEndElement();
    wxml.writeEndDocument();
    m_db_file.close();
}

但问题是第一次接触后标签文件被关闭了。这是结果

<?xml version="1.0" encoding="UTF-8"?>
<Persons>
    <User id="1">
        <Name>das</Name>
        <Surname>vcvx</Surname>
    </User>
</Persons>

<User id="2">
    <Name>eqwevxcv</Name>
    <Surname>xcvxcx</Surname>
</User>

<User id="3">
    <Name>das</Name>
    <Surname>dasdasd</Surname>
</User>

但一定是这样

<Persons>
    <User id="1">
        <Name>das</Name>
        <Surname>vcvx</Surname>
    </User>

    <User id="2">
        <Name>eqwevxcv</Name>
        <Surname>xcvxcx</Surname>
    </User>

    <User id="3">
        <Name>das</Name>
        <Surname>dasdasd</Surname>
    </User>
</Persons>

我们如何做到这一点,在每条新记录之后都必须更改文档结束?

最佳答案

这是一个例子:

void write_to_db(QXmlStreamWriter& writer, QString id, QString name, QString surname)
{
  writer.writeStartElement("User");
  writer.writeAttribute(QXmlStreamAttribute("id", id));

  writer.writeTextElement("Name", name);
  writer.writeTextElement("Surname", surname);

  writer.writeEndElement();
}

// This can be a file, or whatever iodevice your heart desires.
QString out;
QXmlStreamWriter writer(&out);
writer.writeStartDocument();
writer.writeStartElement("Persons");

write_to_db(writer, "1", "das", "vcvx");
write_to_db(writer, "2", "das", "vcvx");
write_to_db(writer, "3", "das", "vcvx");

writer.writeEndElement(); // Close <persons> tag
writer.writeEndDocument();

输出(使用 QXmlStreamWriter::setAutoFormatting/Indent):

<?xml version="1.0"?>
<Persons>
 <User id="1">
  <Name>das</Name>
  <Surname>vcvx</Surname>
 </User>
 <User id="2">
  <Name>das</Name>
  <Surname>vcvx</Surname>
 </User>
 <User id="3">
  <Name>das</Name>
  <Surname>vcvx</Surname>
 </User>
</Persons>

关于c++ - Qt中如何编辑XML文档的结尾(writeEndDocument)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17217668/

相关文章:

c++ - 防止分配给右值

Android:如何在styles.xml 中自定义声明XML 命名空间?

c++ - 如何让 QT Creator 停止记录警告异常?

c++ - 在 Qt5 中创建一个 QVideoWidget

c++ - Qt + iOS - AppDelegate 在哪里?

c++ - 你能告诉我为什么这段代码会崩溃吗?

c++ - 删除范围外的变量

c++ - 方法已经定义(模板类)

c# - 是否可以使用 C# 检测 xml 节点是否存在?

c - 如何使用 XSL 翻译 C 结构中的 XML 文档