使用Qt解析XML和某些成员的修改值

问题描述 投票:0回答:1

我的xml文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <title>myproj</title>
  <note>some note</note>
  <!-- our entry -->

  <entry>
    <desc>Camera Position</desc>
    <identifier>f_f</identifier>
    <type>CameraExtrinsics</type>
    <typeentry>
      <member>pos_x</member>
      <value>-861</value>
    </typeentry>
    <typeentry>
      <member>pos_y</member>
      <value>0</value>
    </typeentry>
  </entry>

</configuration>

如何使用Qt将成员pos_x(来自-861)的值修改为所需的值(假设为50)。目标是,最后,如果我使用文本编辑器打开我的xml文件,我会看到pos_x的值为50。

目前我想出了解析文件的代码,但我不知道如何更进一步

QFile* xmlFile = new QFile("file.xml");

if (!xmlFile->open(QIODevice::ReadOnly | QIODevice::Text))
{
   std::cout << " opening xml file failed " << std::endl;
}

QXmlStreamReader* xmlReader = new QXmlStreamReader(xmlFile);

(我使用的是qt 4.8,如果可能,请避免使用c ++ 11或更高版本)

c++ xml qt
1个回答
0
投票

编辑文档以添加新节点或修改值是完全相同的:

#include <QXmlStreamReader>
#include <QXmlStreamWriter>
#include <QFile>
#include <QDomElement>
#include <QDomDocument>
#include <QDomText>
#include <QTextStream>
#include <QDebug>

int main()
{
    QDomDocument document;

    QString const content("<root><foo><bar>spam</bar></foo></root>")
    if (!document.setContent(content, false))
    {
        qDebug() << "failed to parse file";
        return 0;
    }

    QDomElement docEle = document.documentElement(); // get root node
    QDomElement foo = docEle.firstChildElement("foo"); // get foo node inside the root
    QDomElement bar = foo.firstChildElement("bar"); // get the bar node inside foo
    QDomNode txt = bar.firstChild(); // get the current text
    QDomNode newTxt = document.createTextNode("Booh!"); // create a new text node

    bar.replaceChild(newTxt, txt); // replace the current text node by the new text
    qDebug() << document.toString();
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.