1. 程式人生 > >tinyxml刪除,新增,修改xml檔案

tinyxml刪除,新增,修改xml檔案

TinyXML是一個簡單的、小的、最小的、C + + XML解析器,可以很容易地整合到其他專案。它讀取XML和XML文件建立c++物件代表。可以操縱的物件,再次改變,並儲存為XML。
下面說下使用: xml內容格式如下: <?xml version="1.0" encoding="GBK" ?> <config>     <libs>         <item id="0">             <charact T="1" m="測試"/>             <table>基地發源地</table>         </item>
        <item id="1">             <charact T="2" m="哈哈"/>             <table>你快遞</table>         </item>    </libs> </config> 找到節點的位置介面: bool   GetNodePointerByName(TiXmlElement* pRootEle,char *strNodeName,const char *id, TiXmlElement* &Node)  {
  //TiXmlElement *pElement = myDocument->RootElement();
  if (NULL == pRootEle)
   return false;
  TiXmlElement *temproot = pRootEle;   pRootEle = pRootEle->FirstChild("libs")->ToElement();   for (temproot = pRootEle->FirstChildElement();temproot;temproot = temproot->NextSiblingElement())
   if (0 == strcmp(libid,temproot->Attribute("libid")))
   {
    Node = temproot;
    return true;
   }
   return false;
 } 1.刪除<item>........ </item>這樣一個節點。 xmlpath是xml檔案的路徑,strNodeName是節點的名字,此處是item,id就是區分是哪一個節點要用的。 bool   del_node(const char *xmlpath,char *strNodeName,const char *id)  {
  bool flags = false;   TiXmlDocument *pDoc = new TiXmlDocument();   if (NULL==pDoc)   {
   goto END;
  }   pDoc->LoadFile(xmlpath);   TiXmlElement *pRootEle = pDoc->RootElement();   if (NULL==pRootEle)   {
   goto END;
  }   TiXmlElement *pNode = NULL;   GetNodePointerByName(pRootEle, strNodeName,id, pNode);//獲取節點的位置。   // 假如是根節點   if (pRootEle==pNode)   {
   if(pDoc->RemoveChild(pRootEle))
   {
    pDoc->SaveFile(xmlpath);
    goto END;
   }
   else
    goto END;
  }   // 假如是其它節點   if (NULL!=pNode)   {
   TiXmlNode *pParNode =  pNode->Parent();
   if (NULL==pParNode)
   {
    goto END;
   }
   TiXmlElement* pParentEle = pParNode->ToElement();
   if (NULL!=pParentEle)
   {
    if(pParentEle->RemoveChild(pNode))//刪除節點
     pDoc->SaveFile(xmlpath);//儲存
    else
     goto END;
   }
  }   else   {
   goto END;
  }   flags = true; END:   if (pDoc != NULL)   {
   delete pDoc;
  }   return flags;
 } 2.修改節點的內容 通過id查詢到需要修改的節點,然後遍歷整個節點,把需要修改的地方SetValue新的值,最後儲存 bool modifynode_attribute(const char *xmlpath,const char *id,char *strNodeName,char *T,char *m,char *table)  {
  TiXmlDocument *pDoc = new TiXmlDocument();   if (NULL==pDoc)   {
   return false;
  }   pDoc->LoadFile(xmlpath);   TiXmlElement *pRootEle = pDoc->RootElement();   if (NULL==pRootEle)   {
   delete pDoc;
   return false;
  }   TiXmlElement *pNode = NULL;   GetNodePointerByName(pRootEle,strNodeName,id,pNode);   if (NULL!=pNode)   {
   char *name = "";
   pNode = pNode->FirstChildElement();
   TiXmlAttribute* pAttr = NULL;
   for (pAttr = pNode->FirstAttribute(); pAttr; pAttr = pAttr->Next())  //遍歷父節點的所有子節點
   {
    name = (char *)pAttr->Name();
    if(strcmp(name, "id") == 0 )
    {
     pAttr->SetValue(id);
    }
    else if (strcmp(name, "T") == 0 )
    {
     pAttr->SetValue(T);
    }
    else if (strcmp(name, "m") == 0 )
    {
     pAttr->SetValue(m);
    }
   }
   pNode = pNode->NextSiblingElement();
   pNode->FirstChild()->SetValue(table);
   pDoc->SaveFile(xmlpath);
   delete pDoc;
   return true;
  }   else   {
   delete pDoc;
   return false;
  }
 } 3.新增節點 實現新增節點,先找到你要新增節點的位置,然後把你要新增的子節點,事先給建立好,在這就是<item>.....</item>,最後就使用InsertEndChild,把新建的子節點插入到想加的位置。 bool IS_get_tableinfo::addnode(const char *XmlFile,char *strNodeName, const char *id, char *T, char *m, char *table)   {
  // 定義一個TiXmlDocument類指標   TiXmlDocument *pDoc = new TiXmlDocument();   if (NULL==pDoc)   {
   return false;
  }   pDoc->LoadFile(XmlFile);   TiXmlElement *pRootEle = pDoc->RootElement();   if (NULL==pRootEle)   {
   delete pDoc;
   return false;
  }  // TiXmlElement *pNode = NULL;   //GetNodePointerByName(pRootEle,strNodeName,id,pNode);   TiXmlElement *pElement = pDoc->RootElement();   if (NULL == pElement)   {
   delete pDoc;
   return false;
  }   pElement = pElement->FirstChild("libs")->ToElement();//找到父節點libs位置   if (NULL!=pElement)   {
   // 建立新增的子節點:pNewNode
   TiXmlElement *pNewNode = new TiXmlElement(strNodeName);
   if (NULL==pNewNode)
   {
    delete pDoc;
    return false;
   }
   // 設定節點的屬性值,然後插入節點