qt读写xml文件

http://blog.csdn.net/xiexingshishu/article/details/45177023

1、DOM方式

写xml文件,以QDomText方式写,代码如下

  1. QFilefile("d:/test.txt");
  2. file.open(QIODevice::WriteOnly);
  3. QDomDocumentdoc;
  4. QDomProcessingInstructioninstruction;
  5. instruction=doc.createProcessingInstruction("xml","version=\'1.0\'");
  6. doc.appendChild(instruction);
  7. QDomElementroot=doc.createElement("html");
  8. doc.appendChild(root);
  9. QDomElementdata;
  10. QDomElementtmp;
  11. QDomTexttext;
  12. data=doc.createElement("title");
  13. text=doc.createTextNode(QStringLiteral("多看"));
  14. data.appendChild(text);
  15. root.appendChild(data);
  16. tmp=doc.createElement("book");
  17. "小说"));
  18. tmp.appendChild(text);
  19. root.appendChild(tmp);
  20. QTextStreamout(&file);
  21. doc.save(out,4);
  22. file.close();

读代码为

file.open(QIODevice::ReadOnly);
  • QDomDocumentdoc;
  • doc.setContent(&file);
  • QDomElementroot=doc.documentElement();
  • for(QDomNodenode=root.firstChild();!node.isNull();node=node.nextSibling()){
  • QDomElementelement=node.toElement();
  • QStringtagName=element.tagName();
  • if(tagName=="title"){
  • qDebug()<<element.text();
  • }else"book"){
  • }
  • }

  • 以QDomAttr方式写:

    QDomAttrdata;
  • QDomAttrtmp;
  • data=doc.createAttribute("title");
  • data.setValue(QStringLiteral("多看"));
  • root.setAttributeNode(data);
  • tmp=doc.createAttribute(tmp.setValue(QStringLiteral(root.setAttributeNode(tmp);
  • QTextStreamout(&file);
  • 读QDomAttr

    qDebug()<<root.attribute("book");

  • file.close();

  • 2、用QXmlStreamReader和QXmlStreamWriter

    写文件,设置相关联的文件,用writeStartDocument来开始,用writeEndDocument来结束

    用writeStartElement和writeEndElement来表示元素的开始和结束,需要成对使用

    <name>a</name>形式,用writeTextElement

    <name a=""/>形式,用writeAttribute

    "test.txt");file.open(QIODevice::writeOnly);

  • QXmlStreamWriterxmlstreamwriter(&file);
  • xmlstreamwriter.setAutoFormatting(true);
  • xmlstreamwriter.writeStartDocument();
  • xmlstreamwriter.writeStartElement("xml");
  • "round");
  • xmlstreamwriter.writeAttribute("id",mRoundId);
  • "tableid",mTableId);
  • //player1
  • "player1");
  • "framescore",mPlayer1Frame);
  • "points",mPlayer1Point);
  • "break",mPlayer1ContinuePoint);
  •   xmlstreamwriter.writeCharacters("HelloWorld");//添加内容
  • xmlstreamwriter.writeEndElement();
  • //player2
  • "player2");
  • xmlstreamwriter.writeEndElement();
  • xmlstreamwriter.writeEndDocument();file.close();
  • 结果如下:

    <?xmlversion="1.0"encoding="UTF-8"?>

  • <xml>
  • <roundid=""tableid="1">
  • <player1framescore=""points=""break="">HelloWorld</player1>
  • <player2framescore=""/>
  • </round>
  • </xml>
  • 读文件时,用isStartElement来判断标志的起始

    <name a=""></name>形式,用attributes().value("a")

    <name>a</name>形式,用readElementText

    在读取时,是通过循环,while (!reader.atEnd()) {reader.readNext();.....;}

    "test.txt");

  • QXmlStreamReaderreader(&file);
  • while(!reader.atEnd()){
  • reader.readNext();
  • if(reader.isStartElement()){
  • if(reader.name()=="round"){
  • qDebug()<<reader.attributes().value("id").toString();
  • "tableid").toString();
  • "player1"){
  • "framescore").toString();
  • "points").toString();
  • "break").toString();
  • qDebug()<<reader.readElementText();
  • "player2"){
  • "framescore").toString();
  • "points").toString();
  • "break").toString();
  • qDebug()<<reader.readElementText();
  • file.close();
  • 结果如下

    [html] view plain copy
      ""
    1. "1"
    2. ""
    3. ""
    4. "HelloWorld"
    5. ""

    版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

    相关推荐


    php输出xml格式字符串
    J2ME Mobile 3D入门教程系列文章之一
    XML轻松学习手册
    XML入门的常见问题(一)
    XML入门的常见问题(三)
    XML轻松学习手册(2)XML概念
    xml文件介绍及使用
    xml编程(一)-xml语法
    XML文件结构和基本语法
    第2章 包装类
    XML入门的常见问题(二)
    Java对象的强、软、弱和虚引用
    JS解析XML文件和XML字符串详解
    java中枚举的详细使用介绍
    了解Xml格式
    XML入门的常见问题(四)
    深入SQLite多线程的使用总结详解
    PlayFramework完整实现一个APP(一)
    XML和YAML的使用方法
    XML轻松学习总节篇