用tinyxml 库创建并读写xml代码截取

前端之家收集整理的这篇文章主要介绍了用tinyxml 库创建并读写xml代码截取前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
因为自己每次写完之后都忘记了  然后又要从别的地方学习再重新写  还不如记录再这里

//创建
        TiXmlDocument *pXmlDocument = new TiXmlDocument(m_strFilePath.c_str());//
        TiXmlDeclaration *pDeclaretion = new TiXmlDeclaration("1.0","UTF-8","");//创建xml声明
        pXmlDocument->LinkEndChild(pDeclaretion);
        TiXmlElement *pXmlElement = new TiXmlElement("Symbol");
        pXmlDocument->LinkEndChild(pXmlElement);    
        pXmlDocument->SaveFile(m_strFilePath.c_str());

//读
TiXmlDocument *pXmlDoc = new TiXmlDocument();
 pXmlDoc->LoadFile(strFilePath.c_str());

 TiXmlElement *pRootElement = pXmlDoc->RootElement(); 
 if (pRootElement == NULL)
 {
  return;
 }
 // 第一个子节点 
 TiXmlElement *pSignNode = pRootElement->FirstChildElement("sign"); 
 if (!pSignNode)
 {
  SAFE_DELETE(pSignNode);
  return;
 }
 while (pSignNode != NULL)
 {
  CMapSingleParameter *pMapSingleParameter = new CMapSingleParameter();
  if (!pMapSingleParameter)
  {
   SAFE_DELETE(pMapSingleParameter);
   return ;
  }
  // text
  TCHAR tcharValue[MAX_PATH * 4] = {_T('\0')};

  // name
  const CHAR *pszName = pSignNode->Attribute("name");
  if (pszName != NULL)
  {
   CommonUtil::UTF8ToTCHAR(pszName,tcharValue);
   pMapSingleParameter->AppendParameter(_T("name"),tcharValue);
  }
  
  // height
  const CHAR *pszHeight = pSignNode->Attribute("height");
  if (pszHeight != NULL)
  {
   CommonUtil::UTF8ToTCHAR(pszHeight,tcharValue);
   pMapSingleParameter->AppendParameter(_T("height"),tcharValue);
  }
  //Content
  const CHAR *pszContent = pSignNode->GetText();
  if (pszContent != NULL)
  {
   CommonUtil::UTF8ToTCHAR(pszContent,tcharValue);
   pMapSingleParameter->AppendParameter(_T("content"),tcharValue);
  }

  m_pLatelyVectorSymbol->push_back(pMapSingleParameter);  
  pSignNode = pSignNode->NextSiblingElement();   
 } 



//写
string strFile = m_strFilePath;
 
 //创建文档对象
 TiXmlDocument myXmlDocument;
 //加载文件数据 
 myXmlDocument.LoadFile(strFile.c_str());

 TiXmlElement *pRootElement = myXmlDocument.RootElement(); 
 if (pRootElement == NULL)
 {
  return ;
 }

 if (pRootElement != NULL)
 {
  TiXmlElement *pFirstNode = pRootElement->FirstChildElement("sign");
  if (pFirstNode == NULL)
  { 
   int nSignPos = 0;

   for (TVectorSymbol::iterator ite = m_pLatelyVectorSymbol->begin(); ite != m_pLatelyVectorSymbol->end(); ++ite)
   {
    CMapSingleParameter *pMapSingleParameter = *ite;
    TiXmlElement *insertElement = new TiXmlElement("sign");
    pRootElement->LinkEndChild(insertElement);
    xstring strUnicode = pMapSingleParameter->GetParameterValue(_T("name"));
    TCHAR tcharValue[MAX_PATH*4]= {_T('\0')};
    _tcscpy(tcharValue,strUnicode.c_str());
    char chUtf8[MAX_PATH*4] = {'\0'};
    CommonUtil::TCHARToUTF8(tcharValue,chUtf8);
    insertElement->SetAttribute("name",chUtf8);


    strUnicode = pMapSingleParameter->GetParameterValue(_T("height"));
    _tcscpy(tcharValue,strUnicode.c_str());
    CommonUtil::TCHARToUTF8(tcharValue,chUtf8);
    insertElement->SetAttribute("height",chUtf8);

    strUnicode = pMapSingleParameter->GetParameterValue(_T("content"));
    _tcscpy(tcharValue,chUtf8);
    
    TiXmlText *pXmlText = new TiXmlText(chUtf8);
    pXmlText->SetCDATA(true);//添加格式化<![CDATA[]]>
    
    insertElement->LinkEndChild(pXmlText);

    m_nLatelyTotal ++; 
   }  
  }   
 } 
 myXmlDocument.SaveFile(strFile.c_str());
}


//删除节点

 string strFile = m_strFilePath;

 //创建文档对象
 TiXmlDocument myXmlDocument;
 //加载文件数据 
 myXmlDocument.LoadFile(strFile.c_str());

 TiXmlElement *pRootElement = myXmlDocument.RootElement(); 
 if (pRootElement == NULL)
 {
  return ;
 }

 TiXmlElement *pSignNode = pRootElement->FirstChildElement("sign");
 while (pSignNode != NULL)
 {
  m_nLatelyTotal --;
  TiXmlElement *pSignRemoveNode = pSignNode;
  pSignNode= pSignNode->NextSiblingElement("sign");
  pRootElement->RemoveChild(pSignRemoveNode);  
 }

 myXmlDocument.SaveFile(strFile.c_str());

猜你在找的XML相关文章