0

小さなプログラムのアドレス帳を書きます。連絡先は 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>

新しいレコードごとに document end を変更する必要があるため、これを行うにはどうすればよいでしょうか?

4

1 に答える 1

1

これは例です:

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>
于 2013-06-20T16:19:09.690 に答える