Qt中DOM的读写

 对于一般的XML数据处理,Qt提供了QtXml模块。QXml模块提供了三种截然不同的应用程序编程接口用于读取XML文档:

       QXmlStreamReader 是一个用于读取格式良好的XML文档的快速解析器。

        DOM(文档对象模型)把XML文档转换为应用程序可以遍历的树形结构。

        SAX(XML简单应用程序编程接口)通过虚拟函数直接向应用程序报告“解析事件”。

    对于XML文件的写入,Qt也提供了三种可用的方法:

        使用QXmlStreamWriter。

 

在内存中以DOM树的结构表示数据,并要求这个数型结构将自己写到文件中。

        手动生成XML。

在这里我使用了DOM来对XML文件进行操作,代码如下:

生成的树形结构如下:

  
  
  
  
  1. <?xml version ="1.0" encoding="UTF-8"?> 
  2. <ContactMan> 
  3.     <Info> 
  4.         <name>zhang san</name> 
  5.         <phone>110119120</phone> 
  6.     </Info> 
  7. </ContactMan> 
  8.  
  9.  
  10.  
  11. bool RWXml::readFile(const QString &fileName) 
  12.     QFile file(fileName); 
  13.     if(!file.open(QFile::ReadOnly | QFile::Text)) 
  14.     { 
  15.         std::cerr << "Error: Cannot read file" <<std::endl; 
  16.         return false
  17.     } 
  18.     QString errorStr; 
  19.     int errorLine; 
  20.     int errorColumn; 
  21.     QDomDocument doc; 
  22.  
  23.     if(!doc.setContent(&file,true,&errorStr,&errorLine,&errorColumn)) 
  24.     { 
  25.         std::cerr << "Error: Prase error at line " << std::endl; 
  26.         file.close(); 
  27.         return false
  28.     } 
  29.     QDomElement root = doc.documentElement(); 
  30.     QDomNode n = root.firstChild(); 
  31.     while(!n.isNull()) 
  32.     { 
  33.         QDomElement e= n.toElement(); 
  34.         if(!e.isNull()) 
  35.         { 
  36.             qDebug() << e.tagName() << ":" << e.text(); 
  37.         } 
  38.         n = n.nextSibling(); 
  39.     } 
  40.  
  41.     file.close();; 
  42.     return true
  43. bool RWXml::writeFile(const QString &fileName) 
  44.     QFile file(fileName); 
  45.     if(!file.open(QFile::Text | QFile::WriteOnly)) 
  46.     { 
  47.         std::cerr << "Error: Cannot write file" << qPrintable(fileName) << std::endl; 
  48.          file.close(); 
  49.          return false
  50.     } 
  51.     QDomDocument doc; 
  52.     QDomProcessingInstruction instruction; 
  53.     instruction = doc.createProcessingInstruction("xml" , "version =\"1.0\" encoding=\"UTF-8\""); 
  54.     doc.appendChild(instruction); 
  55.     QDomElement root = doc.createElement("ContactMan"); 
  56.     doc.appendChild(root); 
  57.  
  58.     QDomElement info_Node = doc.createElement("Info"); 
  59.    /* QDomAttr nameAttr = doc.createAttribute("name"); 
  60.     nameAttr.setValue("zhang san"); 
  61.     QDomAttr phoneAttr = doc.createAttribute("phone"); 
  62.     phoneAttr.setValue("110"); 
  63.     info_Node.setAttributeNode(nameAttr); 
  64.     info_Node.setAttributeNode(phoneAttr); 
  65.  
  66.     root.appendChild(info_Node); 
  67.     */ 
  68. //********one 
  69.  
  70.     QDomElement name_Node = doc.createElement("name"); 
  71.     QDomElement phone_Node = doc.createElement("phone"); 
  72.  
  73.     QDomText text; 
  74.     text = doc.createTextNode("zhang san"); 
  75.     name_Node.appendChild(text); 
  76.     text = doc.createTextNode("110119120"); 
  77.     phone_Node.appendChild(text); 
  78.  
  79.     info_Node.appendChild(name_Node); 
  80.     info_Node.appendChild(phone_Node); 
  81.  
  82.     root.appendChild(info_Node); 
  83.  
  84.     QTextStream out(&file); 
  85.     doc.save(out , 4); 
  86.     file.close(); 
  87.     return true

 

本文出自 “Record” 博客,请务必保留此出处http://mjrao.blog.51cto.com/6086668/1007951

你可能感兴趣的:(Qt的XML,QT的数据库,QT数据的读写,QT的DOM)