qt操作xml文件封装类
时间: 2023-05-27 07:05:02 浏览: 274
Qt中提供了QXmlStreamReader和QXmlStreamWriter两个类来读写XML文件,可以根据需要自己封装一个操作XML文件的类。以下是一个简单的封装类XmlHelper,可以实现读取和写入XML文件的基本操作。
```
#include <QXmlStreamReader>
#include <QXmlStreamWriter>
#include <QFile>
class XmlHelper
{
public:
XmlHelper(const QString& fileName)
{
m_fileName = fileName;
}
// 读取XML文件中指定节点的值
QString readValue(const QString& nodeName)
{
QFile file(m_fileName);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return QString();
QXmlStreamReader reader(&file);
while (!reader.atEnd())
{
if (reader.isStartElement() && reader.name() == nodeName)
{
reader.readNext();
return reader.text().toString();
}
else
{
reader.readNext();
}
}
return QString();
}
// 写入XML文件中指定节点的值
void writeValue(const QString& nodeName, const QString& value)
{
QFile file(m_fileName);
if (!file.open(QIODevice::ReadWrite | QIODevice::Text))
return;
QXmlStreamReader reader(&file);
QXmlStreamWriter writer(&file);
writer.setAutoFormatting(true);
while (!reader.atEnd())
{
if (reader.isStartElement() && reader.name() == nodeName)
{
// 找到节点,修改节点的值
reader.readNext();
writer.writeStartElement(nodeName);
writer.writeCharacters(value);
writer.writeEndElement();
}
else
{
// 没有找到节点,继续向下读取
writer.writeCurrentToken(reader);
reader.readNext();
}
}
// 文件中没有指定节点,添加节点
if (reader.hasError())
return;
writer.writeStartElement(nodeName);
writer.writeCharacters(value);
writer.writeEndElement();
}
private:
QString m_fileName;
};
```
使用示例:
```
XmlHelper helper("config.xml");
// 读取XML文件中的值
QString name = helper.readValue("name");
QString age = helper.readValue("age");
// 写入XML文件中的值
helper.writeValue("name", "Tom");
helper.writeValue("age", "20");
```
以上代码是一个简单的示例,实际应用中还需根据实际需求进行修改和完善。
阅读全文