1、使用流QXmlStreamReader、QXmlStreamWriter读写xml文件
项目的pro文件里面添加:
QT +=core xml
用QXmlStreamReader读取xml文本内容
在路径C:\Users\Administrator\Desktop\ZGXIPCDemo中存放device.xml文件。内容以及各式如下:
使用qDebug()显示读取文件的内容
#include<QFile>
#include<QXmlStreamReader>
#include<QXmlStreamWriter>
#include<QDebug>
void query_dev_xml(QString dev_xml_dir); //查询xml,dev_xml_dir是xml文件的存放地址
//查询制定的.xml中相应信息,显示在终端
//dev_xml_dir .xml文件的存放地址
void devmanager::query_dev_xml(QString dev_xml_dir) //查询xml
{
QFile file(dev_xml_dir);//
if(!file.open(QFile::ReadOnly|QFile::Text))
{
qDebug()<<"cannot open file";
}
else {
qDebug()<<"file opened!";
}
QXmlStreamReader reader;
reader.setDevice(&file);
while(!reader.atEnd())
{
QXmlStreamReader::TokenType type =reader.readNext();
//根据记号的类型进行输出
if (type==QXmlStreamReader::StartElement)
{
qDebug()<<"start element:"<<reader.name()<<"reader.text:"<<reader.text();
if(reader.attributes().hasAttribute("id"))
{
qDebug()<<"has attribute device id="<<reader.attributes().value("id");
qDebug()<<"version"<<reader.attributes().value("version");
qDebug()<<"password: "<<reader.attributes().value("password");
qDebug()<<"username: "<<reader.attributes().value("username");
qDebug()<<"channelno: "<<reader.attributes().value("channelno");
qDebug()<<"port: "<<reader.attributes().value("port");
qDebug()<<"ip: "<<reader.attributes().value("ip");
qDebug()<<"type: "<<reader.attributes().value("type");
qDebug()<<"name: "<<reader.attributes().value("name");
qDebug()<<"id: "<<reader.attributes().value("id");
}
else
{
qDebug()<<"element has no id";
}
}
if(type==QXmlStreamReader::EndElement)
qDebug()<<" end element: "<<reader.name();
if (type==QXmlStreamReader::Characters&&!reader.isWhitespace())
qDebug()<<"Characters and is whitespace: "<<reader.text();
}
file.close();
}
运行结果如下:
使用QXmlStreamWriter编写xml文件
1、直接填写具体信息
void write_dev_xml(QString dev_xml_dir); //写入xml数据,其它设置同上
//将设备信息写入.xml文件中
//dev_xml_dir:.xml文件地址 devinfo:设备信息
void devmanager::write_dev_xml(QString dev_xml_dir)//, dev_info devinfo
{
QFile file(dev_xml_dir);//
if(!file.open(QFile::WriteOnly|QFile::Text|QFile::Truncate))
{
qDebug()<<"cannot open file to write";
}
else
{
qDebug()<<"write file opened!";
}
QXmlStreamWriter writer;
// QXmlStreamReader reader; //
QXmlStreamAttributes attributes; //QXmlStreamAttributes,而非QXmlStreamAttribute
writer.setCodec("UTF-8");
writer.