QXmlStreamReader和QXmlStreamWriter实现将一个xml文件读取后保存为另一个xml

QXmlStreamReader 类

是一个xml解析器,用于读取xml文件,相对的是QXmlStreamWriter类,是用于写入xml文件是一个快速的解析器,可以通过流api实现读取规范格式的xml文件;qt也有另一种解析器。QXmlSimpleReader。但是相比较,QXmlStreamReader和QXmlStreamWriter更高效,更简单。在使用见 QDomDocument的的应用程序中,更方便使用。

当读取器报告开始元素时,属性由attributes() 中的QXmlStreamReader返回。该类还可以与QXmlStreamWriter 一起用作writeAttributes()的参数。便利函数value () 遍历向量并返回给定 namespaceUri 的属性值和属性名称。可以使用append ()添加新属性。


保存新的xml文件

遍历旧的xml文件,按照格式输出的新的xml文件

void SaveNewFile(QString srcFileName,QString tarFileName){
 
//*QFile类QT的文件的输入输出设备类。用来读写二进制文件与文本文件的输入输出设备。
    QFile srcFile(srcFileName);
    srcFile.open(QFile::ReadOnly | QFile::Text);
    QFile tarFile(tarFileName);
    tarFile.open(QFile::WriteOnly | QFile::Text | QIODevice::Truncate);
    //创建QXmlStreamReader
    QXmlStreamReader reader(&srcFile);
    QXmlStreamWriter writer(&tarFile);
 
    writer.setAutoFormatting(true);
    //;//自动设置格式,这样会自动换行和添加缩进
    writer.writeStartDocument();//写入开始记号
 
   while (!reader.atEnd())
    {
        reader.readNext();
##
        if(reader.isStartElement())
        //测试当前内容节点是否是开始标记。
        {
       
            QXmlStreamAttributes attr = reader.attributes();
            qDebug()<<reader.name().toString();
            writer.writeStartElement(reader.name().toString());
            if(attr.size()>0)
            {
                writer.writeAttributes(attr);
            }
        }
        if(reader.isCharacters())
        {
            //qDebug()<<reader.text().toString();
            writer.writeCharacters(reader.text().toString());
        }
        if(reader.isEndElement())
        {
            writer.writeEndElement();
        }
    }
 
    writer.writeEndDocument();
    //对应于writeStartDocument(),当调用这个函数时,即表示文档信息写入完毕。 
    srcFile.close();
    tarFile.close();
 
}
 
void MainWindow::on_pushButton_2_clicked()
{
    SaveNewFile("MapConfig.xml","testsave.xml");
}



上一篇:如何简单的测试kubernetes的dns add-ons是否工作正常?


下一篇:xml文件对比或xml大字符串对比方法(蛮精简的)