美文网首页my-QT专栏
QT xml格式操作

QT xml格式操作

作者: c之气三段 | 来源:发表于2021-09-10 17:19 被阅读0次
QT       += core xml

写xml

    //打开或创建文件
       QFile file("C:/Users/xxx/Desktop/text.xml"); //相对路径、绝对路径、资源路径都可以
       if(!file.open(QFile::WriteOnly|QFile::Truncate)) //可以用QIODevice,Truncate表示清空原来的内容
           return;

       QDomDocument xmlDoc;
       //写入xml头部
       QDomProcessingInstruction instruction; //添加处理命令
       instruction=xmlDoc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\"");
       xmlDoc.appendChild(instruction);
       //添加根节点
       QDomElement root=xmlDoc.createElement("paras");
       xmlDoc.appendChild(root);

       //添加第一个子节点即标签
       QDomElement firstNode = xmlDoc.createElement("para");
       firstNode.setAttribute("id",1); //方式一:创建属性  其中键值对的值可以是各种类型
       QDomAttr time = xmlDoc.createAttribute("time"); //方式二:创建属性 值必须是字符串
       time.setValue("2013/6/13");
       firstNode.setAttributeNode(time);
       QDomElement lable_1 = xmlDoc.createElement("value"); //创建子标签
       QDomText text; //设置括号标签中间的值
       text = xmlDoc.createTextNode("20");
       firstNode.appendChild(lable_1);
       lable_1.appendChild(text);
       QDomElement lable_2 = xmlDoc.createElement("value"); //创建子标签
       text = xmlDoc.createTextNode("30");
       lable_2.appendChild(text);
       firstNode.appendChild(lable_2);
       root.appendChild(firstNode);

       //添加第二个子节点及其子标签,部分变量只需重新赋值
       QDomElement secondNode = xmlDoc.createElement("para");
       secondNode.setAttribute("name","qt5");
       secondNode.setAttribute("id",2);
       secondNode.setAttribute("type","float");
       QDomElement leble_scon_1 = xmlDoc.createElement("selection");
       leble_scon_1.setAttribute("name","qchart");
       QDomText selec_text = xmlDoc.createTextNode("30.2");
       leble_scon_1.appendChild(selec_text);
       secondNode.appendChild(leble_scon_1);
       root.appendChild(secondNode);

       //输出到文件
       QTextStream out_stream(&file);
       xmlDoc.save(out_stream,4); //缩进4格
       file.close();
image.png

读xml,可以通过遍历获取到任意数据,也可进行数据更新

 //打开或创建文件
    QFile file("C:/Users/xxx/Desktop/text.xml"); //相对路径、绝对路径、资源路径都行不过需要重写一下
    if(!file.open(QFile::ReadOnly))
        return;
    
    QDomDocument xmlDoc;
    if(!xmlDoc.setContent(&file))
    {
        file.close();
        return;
    }
    file.close();
    
    QDomElement root=xmlDoc.documentElement(); //返回根节点
    QDomNode node=root.firstChild(); //获得第一个子节点
    while(!node.isNull())  //如果节点不空
    {
        if(node.isElement()) //如果节点是标签吗
        {
            //父节点
            QDomElement leble=node.toElement(); //获取此标签
            QString paraName = leble.tagName();//标签
            QString attribute;//属性
            QDomNamedNodeMap nodeMap =  leble.attributes();//遍历所有属性顺序是乱序的,也可以按属性名获取值
            for (int i = 0; i < nodeMap.size(); ++i)
            {
                attribute.append(nodeMap.item(i).nodeName()).append(":").append(nodeMap.item(i).nodeValue()).append("  ");
            }
            qDebug()<<paraName.append("  ").append(attribute);
            //子节点
            QDomNodeList list=leble.childNodes();
            for(int i=0;i<list.count();i++)
            {
                QDomNode childNode=list.at(i);
                if(childNode.isElement())
                {
                    QDomElement childLeble=childNode.toElement();
                    QString vlueName = childLeble.tagName();//子标签名
                    QString attribute;//属性
                    QString text;//标签包的内容
                    QDomNamedNodeMap childLebleMap =  childLeble.attributes();//遍历所有属性顺序是乱序的,也可以按属性名获取值
                    for (int i = 0; i < childLebleMap.size(); ++i)
                    {
                        attribute.append(childLebleMap.item(i).nodeName()).append(":").append(childLebleMap.item(i).nodeValue()).append("  ");
                    }
                    text = childNode.toElement().text();
                    qDebug()<<vlueName.append("  ").append(attribute).append("  ").append(text);
                }
            }
        }
        node=node.nextSibling(); //下一个兄弟节点,nextSiblingElement()是下一个兄弟元素,都差不多
    }
image.png

修改指定值先remove在重新添加

相关文章

  • QT xml格式操作

    写xml 读xml,可以通过遍历获取到任意数据,也可进行数据更新 修改指定值先remove在重新添加

  • QT Creator 配置共享

    QT 会在打开 .pro 工程后,自动生成一个.pro.user 文件,XML 格式,用于存放用户的工程配置,包括...

  • Qt界面开发【2】--UI文件

    Qt提供了一个xml格式的.ui文件,可以在编译前解释为C++代码,ui文件可以用Qt 提供的可视化界面编辑工具D...

  • Qt 写Xml

    转自QT4.86写中文XML新建Qt空项目名称xml.proxml.pro main.cpp

  • Qt数据存储(二)

    Qt 中的 XML 支持[https://doc.qt.io/qt-5.15/topics-data-storag...

  • 13_文件处理

    一、文件读写类型 支持txt格式,yam/html/xml/csv也支持,以下是以txt格式做介绍。 二、文件操作...

  • IOS开发 XML文件格式及数据解析

    XML文件格式: 1:XML文件格式介绍 2:XML文件格式定义 3:XML文件格式的语法 可扩展标记语言(XML...

  • web开发之xml

    1. 关于xml格式定义 xml格式定义分为两部分: 申明 内容大概格式定义如下:

  • PyQt5 表格方法随记

    QT 表格操作

  • XML格式Word文档常用标签介绍

    Office2003以上,Word是可以以XML文本格式存储的。当需要在程序中通过操作XML文本的方式修改Word...

网友评论

    本文标题:QT xml格式操作

    本文链接:https://www.haomeiwen.com/subject/uscnwltx.html