TiXmlDocument 解析 C++ vc xml元素文本修改
金山界面库读取指定配置项
代码解析:c++
金山界面库读取指定配置项
xml配置:
<dlg pos="33,0,-0,-0" id="6500" crbg="FFFFFF">
<dlg pos="0,0,-0,30" crbg="FFFFFF">
<imgbtn pos="0,0,-0,-0" id="6501" class="P" posfont-x="10" posfont-y="0">AAAAAAA</imgbtn>
</dlg>
<dlg pos="0,30,-0,60" crbg="FFFFFF">
<imgbtn pos="0,0,-0,-0" id="6502" class="P" posfont-x="10" posfont-y="0">BBBBBBB</imgbtn>
</dlg>
<dlg pos="0,60,-0,90" crbg="FFFFFF">
<imgbtn pos="0,0,-0,-0" id="6503" class="P" posfont-x="10" posfont-y="0">CCCCCCC</imgbtn>
</dlg>
<dlg pos="0,90,-0,120" crbg="FFFFFF">
<imgbtn pos="0,0,-0,-0" id="6504" class="P" posfont-x="10" posfont-y="0">DDDDDDD</imgbtn>
</dlg>
</dlg>
代码解析:c++
LPCTSTR pstr = strXMLPath.GetBuffer();
if (findfile.FindFile(pstr))
{
TiXmlDocument xmlDoc;
CStringA strXml;
// 所读文件的大小 ==
long nsizefile = findfile.GetFileSize();
strXml = xmlDoc.ReadXML(CW2A(strXMLPath), nsizefile + 1); // 读取保存后的文档内容 ==
CString strtemp = CA2W(strXml, CP_UTF8); // 字符串xml文档格式化
xmlDoc.Parse(strXml, NULL, TIXML_ENCODING_UTF8);
}
if (xmlDoc.Error())
{
return ;
}
TiXmlElement *pXmlRootElem = xmlDoc.RootElement();
if (NULL != pXmlRootElem)
{
TiXmlNode* pRootChild = pXmlRootElem->FirstChild();
if(pRootChild == NULL)
{
return ;
}
TiXmlNode* pChild = pRootChild->FirstChild();
LPCSTR pstrNode = pChild->Value();
TiXmlNode* pLastChild = pRootChild->LastChild();
LPCSTR pstrdlgNode = pLastChild->Value();
for( TiXmlNode* pNodeChild = pLastChild->FirstChild();
NULL != pNodeChild; pNodeChild = pNodeChild->NextSibling())
{
TiXmlNode* pCurNode = pNodeChild->FirstChild();
if(pCurNode == NULL)
{
continue ;
}
LPCSTR lpNode = pCurNode->Value(); // imgbtn ==
LPCSTR lpstrAttrval = pCurNode->ToElement()->Attribute("abbreviation");
TiXmlElement * pElement = pCurNode->ToElement();
TiXmlNode * pXmlText = pElement->FirstChild(); // 文本看出一种特殊的节点 ==
LPCSTR lpstrtext = pXmlText->Value();); // 取出文本,如:AAAA,BBB,CCC,DDDDD.
CString strtemp = CA2W(lpstrtext, CP_UTF8);
if (strtemp.Find(FLAG_MAIN_MENU_POPUP) > 0) // 清除所有的默认标示 ==
{
strtemp.Replace(FLAG_MAIN_MENU_POPUP, _T(""));
pXmlText->SetValue(CT2A(strtemp, CP_UTF8));
}
if (_strcmpi(lpstrAttrval, Unicode2Ansi(strSoftID)) == 0)// 重新添加当前设置为默认的 ==
{
strtemp += FLAG_MAIN_MENU_POPUP;
// TiXmlText strtext = CW2A(strtemp);
// pElement->ReplaceChild(pCurNode, strtext
pXmlText->SetValue(CT2A(strtemp, CP_UTF8));
}
}
}
// // 保存文件 ==
xmlDoc.SaveFile(CW2A(strXMLPath));
strXml = _T("");
// 读取保存后的文档内容 ==
strXml = xmlDoc.ReadXML(CW2A(strXMLPath), nsizefile + 1);
if (!SetXml(strXml))
{
return ;
}
xmlDoc.Clear();