У меня есть XML файл следующего формата.
<!DOCTYPE newproject>
<subject_details>
<Name>Name5</Name>
<Surname>Surname5</Surname>
<Patient_ID>PID05</Patient_ID>
<Date>01/01/2000 00:00</Date>
<Clinician_Note>note note</Clinician_Note>
<Settings>
<Current>19</Current>
<PW>25</PW>
<Freq>26</Freq>
</Settings>
</subject_details>
Где дочерние узлы Settings
- Current
, PW
и Freq
. Их значения трех различных QSlider
.
Чтобы добавить содержимое в узел Settings
, я делаю следующие шаги, как показано ниже:
- Откройте XML файл только для чтения, прочитайте его все, закройте его.
- Внесите изменения в документ в памяти.
- Затем откройте файл для перезаписи, запишите все содержимое, закройте файл.
См. Код:
//Open the file read-only, read it all in, close it.
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug () << "Error saving XML file....";
QMessageBox::information(this, "Unable to open file for read", file.errorString());
return;
}
QDomDocument document;
document.setContent(&file);
QDomElement root = document.documentElement();
file.close();
// Make changes in-memory document.
QDomElement newTag = document.createElement(QString("Settings"));
QDomNode SettingsNode = root.elementsByTagName("Settings").at(0).firstChild();
QDomElement SettingsNodeVal = SettingsNode.toElement();
if (SettingsNodeVal.isNull())
{
QDomElement newCurrTag = document.createElement(QString("Current"));
QDomText newCurrVal = document.createTextNode(currVal);
newCurrTag.appendChild(newCurrVal);
newTag.appendChild(newCurrTag);
QDomElement newPWTag = document.createElement(QString("PW"));
QDomText newPWVal = document.createTextNode(PWVal);
newPWTag.appendChild(newPWVal);
newTag.appendChild(newPWTag);
QDomElement newFreqTag = document.createElement(QString("Freq"));
QDomText newFreqVal = document.createTextNode(FreqVal);
newFreqTag.appendChild(newFreqVal);
newTag.appendChild(newFreqTag);
root.appendChild(newTag);
}
//Then open the file for overwrite, write all content, close file.
if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
{
qDebug () << "Error saving XML file....";
QMessageBox::information(this, "Unable to open file for write", file.errorString());
return;
}
QTextStream output(&file);
output << document.toString();
file.close();
}
Здесь я могу добавить Children в узел Settings
, если он пуст. Это отлично работает.
Мой следующий шаг:
Я хочу изменить существующие Settings
дочерние узлы (Current
, PW
и Freq
et c.).
Может кто-нибудь показать мне, как изменить существующие значения узлов в приведенном выше примере?
Заранее спасибо