QDomDocument读写XML文件

什么是XML

什么是XML—详情

实例

用Qt实现xml的读写操作,以下图为例:
在这里插入图片描述

QDomDocument写XML文件

void Widget::writeXMLContents()
{
    //写入xml
        QFile file("../info.xml");
        if (!file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Truncate))
        {
            return;
        }
        QDomDocument doc;
        QDomProcessingInstruction instruction;
        instruction = doc.createProcessingInstruction("xml", "version = \"1.0\" encoding = \"UTF-8\"");
        doc.appendChild(instruction);         //写入文件头

        QDomElement root = doc.createElement("bookStore");//根节点
        doc.appendChild(root);


        QDomElement node_book = doc.createElement("Book");//子节点
        QDomAttr atr = doc.createAttribute("category");
        atr.setValue(ui->lineEditCategory->text());
        node_book.setAttributeNode(atr);//设置属性

        QDomElement node_title = doc.createElement("Title");

        QDomAttr atr2 = doc.createAttribute("lang");
        atr2.setValue("en");
        node_title.setAttributeNode(atr2);

        QDomElement node_author = doc.createElement("Author");
        QDomElement node_time = doc.createElement("Time");
        QDomElement node_price = doc.createElement("Price");

        node_title.appendChild(doc.createTextNode(ui->lineEditTitle->text()));
        node_author.appendChild(doc.createTextNode(ui->lineEditAuthor->text()));
        node_time.appendChild(doc.createTextNode(ui->lineEditTime->text()));
        node_price.appendChild(doc.createTextNode(ui->lineEditPrice->text()));

        node_book.appendChild(node_title);
        node_book.appendChild(node_author);
        node_book.appendChild(node_time);
        node_book.appendChild(node_price);

        root.appendChild(node_book);

        QTextStream out(&file);
        doc.save(out, 4);//写入文件 第二个参数为缩进
        file.close();
}

QDomDocument读XML文件

void Widget::readXMLContents()
{

    QFile file("../info.xml");
    if (!file.open(QIODevice::ReadOnly|QIODevice::Text))
    {
      return;
    }
    QDomDocument doc;  //xml格式文件
    if (!doc.setContent(&file))
    {
      file.close();
      return;
    }
    file.close();
    QDomElement root = doc.documentElement(); //节点 bookstore
      if (!root.isNull())
      {
          QDomNode node_book = root.firstChild(); //节点book
          while (!node_book.isNull())
          {
              QDomElement element_book = node_book.toElement(); //QDomnode转成QDomElement
              QString category  = element_book.attributeNode("category").value();
              ui->lineEditCategory->setText(category);
              if (!element_book.isNull())
              {
                  QDomElement node_Title = element_book.firstChildElement("Title"); //Title节点
                  if (!node_Title.isNull())
                  {
                      QString title = node_Title.text();
                      ui->lineEditTitle->setText(title);
                  }
                  QDomElement node_author = element_book.firstChildElement("Author"); //Author节点
                  if (!node_author.isNull())
                  {
                      QString author = node_author.text();
                      ui->lineEditAuthor->setText(author);
                  }
                  QDomElement node_time = element_book.firstChildElement("Time"); //Time节点
                  if (!node_time.isNull())
                  {
                      QString time = node_time.text();
                      ui->lineEditTime->setText(time);
                  }
                  QDomElement node_price = element_book.firstChildElement("Price"); //Flag节点
                  if (!node_price.isNull())
                  {
                     QString price = node_price.text();
                     ui->lineEditPrice->setText(price);
                  }
              }
              node_book = node_book.nextSibling();       //读取下一个book节点
          }
      }
}

结果

点击添加可以将数据存入xml文件,点击读取可以从xml文件中读取数据。
在这里插入图片描述
xml文件的内容
在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值