qt读写xml文件

前端之家收集整理的这篇文章主要介绍了qt读写xml文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

1、DOM方式

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

@H_502_7@
  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. ""

    猜你在找的XML相关文章