实际项目使用例程(一)

来源:互联网 发布:网页图片批量下载软件 编辑:程序博客网 时间:2024/06/05 18:14

作者:shmilxu

个人主页:http://blog.csdn.net/shmilxu

实现功能:完成对string类型的xml遍历,复制,修改,删除等操作。

原xml:

<action id="1">    <parameter groups="1" stationid="44030028" deviceid="00201" devicename="RXMS855" funcid="15">        <group index="0">            <item name="antenna" value="LF Antenna(25MHz-1000MHz)" />            <item name="startfrequ" value="885MHz" />            <item name="stopfrequ" value="889MHz" />            <item name="startfreqd" value="930MHz" />            <item name="stopfreqd" value="934MHz" />            <item name="step" value="25kHz" />            <item name="detector" value="average" />            <item name="gainctrl" value="fast" />            <item name="attenuation" value="0" />            <item name="scanmode" value="highquality" />            <item name="reflevel" value="-20dBm" />        </group>    </parameter>    <other_param /></action>
修改后xml:

<action id="1">    <parameter groups="2" stationid="44030028" deviceid="00201" devicename="RXMS855" funcid="15">        <group index="0">            <item name="antenna" value="LF Antenna(25MHz-1000MHz)" />            <item name="startfreq" value="885MHz" />            <item name="stopfreq" value="889MHz" />            <item name="step" value="25kHz" />            <item name="detector" value="average" />            <item name="gainctrl" value="fast" />            <item name="attenuation" value="0" />            <item name="scanmode" value="highquality" />            <item name="reflevel" value="-20dBm" />        </group>        <group index="1">            <item name="antenna" value="LF Antenna(25MHz-1000MHz)" />            <item name="startfreq" value="930MHz" />            <item name="stopfreq" value="934MHz" />            <item name="step" value="25kHz" />            <item name="detector" value="average" />            <item name="gainctrl" value="fast" />            <item name="attenuation" value="0" />            <item name="scanmode" value="highquality" />            <item name="reflevel" value="-20dBm" />        </group>    </parameter>    <other_param /></action>
封装的函数:

string CDevCtrl::ThransformGRTFSParam(const char* oldParam){string strnew;TiXmlDocument lActionXML;lActionXML.Parse(oldParam);TiXmlNode* lpActionNode = lActionXML.RootElement();TiXmlNode* lpParameterNode = lpActionNode->FirstChild();// 循环复制group以及下面的所有标签 [2016-5-4]TiXmlNode* lpGroupNode = lpParameterNode->FirstChild("group");TiXmlElement* lpNewGroupEle = new TiXmlElement("group");if (NULL == lpNewGroupEle){return "";}lpParameterNode->LinkEndChild(lpNewGroupEle);lpNewGroupEle->SetAttribute("index","1");TiXmlNode* lpItemNode = NULL;while(lpItemNode = lpGroupNode->IterateChildren("item",lpItemNode)){TiXmlElement* lpNewItemEle = new TiXmlElement("item");if (NULL == lpNewItemEle){return "";}lpNewGroupEle->LinkEndChild(lpNewItemEle);TiXmlAttribute* lpAttribute = NULL;for(lpAttribute = lpItemNode->ToElement()->FirstAttribute();lpAttribute;lpAttribute = lpAttribute->Next()){lpNewItemEle->SetAttribute(lpAttribute->Name(),lpAttribute->Value());}}// 将groups的值改成2 [2016-5-4]TiXmlAttribute* lpParamAtt = NULL;for (lpParamAtt = lpParameterNode->ToElement()->FirstAttribute();lpParamAtt;lpParamAtt = lpParamAtt->Next()){string name = lpParamAtt->Name();if (name == "groups"){lpParamAtt->SetValue("2");break;}}// 删除两个group中的item中不用的开始和终止频率 [2016-5-4]lpGroupNode = lpParameterNode->FirstChild("group");lpItemNode = NULL;bool bfind = false;while(lpItemNode = lpGroupNode->IterateChildren("item",lpItemNode)){TiXmlAttribute* lpAttribute = NULL;for(lpAttribute = lpItemNode->ToElement()->FirstAttribute();lpAttribute;lpAttribute = lpAttribute->Next()){string value = lpAttribute->Value();if (value == "startfreqd"){lpGroupNode->ToElement()->RemoveChild(lpItemNode);bfind = true;break;}}if (bfind){break;}}lpGroupNode = lpParameterNode->FirstChild("group");lpItemNode = NULL;bfind = false;while(lpItemNode = lpGroupNode->IterateChildren("item",lpItemNode)){TiXmlAttribute* lpAttribute = NULL;for(lpAttribute = lpItemNode->ToElement()->FirstAttribute();lpAttribute;lpAttribute = lpAttribute->Next()){string value = lpAttribute->Value();if (value == "stopfreqd"){lpGroupNode->ToElement()->RemoveChild(lpItemNode);bfind = true;break;}}if (bfind){break;}}lpGroupNode = lpParameterNode->LastChild("group");lpItemNode = NULL;bfind = false;while(lpItemNode = lpGroupNode->IterateChildren("item",lpItemNode)){TiXmlAttribute* lpAttribute = NULL;for(lpAttribute = lpItemNode->ToElement()->FirstAttribute();lpAttribute;lpAttribute = lpAttribute->Next()){string value = lpAttribute->Value();if (value == "startfrequ"){lpGroupNode->ToElement()->RemoveChild(lpItemNode);bfind = true;break;}}if (bfind){break;}}lpGroupNode = lpParameterNode->LastChild("group");lpItemNode = NULL;bfind = false;while(lpItemNode = lpGroupNode->IterateChildren("item",lpItemNode)){TiXmlAttribute* lpAttribute = NULL;for(lpAttribute = lpItemNode->ToElement()->FirstAttribute();lpAttribute;lpAttribute = lpAttribute->Next()){string value = lpAttribute->Value();if (value == "stopfrequ"){lpGroupNode->ToElement()->RemoveChild(lpItemNode);bfind = true;break;}}if (bfind){break;}}// 将目前的频率名字改成目标频率名字 [2016-5-4]lpGroupNode = lpParameterNode->FirstChild("group");lpItemNode = NULL;while(lpItemNode = lpGroupNode->IterateChildren("item",lpItemNode)){TiXmlAttribute* lpAttribute = NULL;for(lpAttribute = lpItemNode->ToElement()->FirstAttribute();lpAttribute;lpAttribute = lpAttribute->Next()){string name = lpAttribute->Name();string value = lpAttribute->Value();if (name == "name" && value == "startfrequ"){lpAttribute->SetValue("startfreq");break;}if (name == "name" && value == "stopfrequ"){lpAttribute->SetValue("stopfreq");break;}}}lpGroupNode = lpParameterNode->LastChild("group");lpItemNode = NULL;while(lpItemNode = lpGroupNode->IterateChildren("item",lpItemNode)){TiXmlAttribute* lpAttribute = NULL;for(lpAttribute = lpItemNode->ToElement()->FirstAttribute();lpAttribute;lpAttribute = lpAttribute->Next()){string name = lpAttribute->Name();string value = lpAttribute->Value();if (name == "name" && value == "startfreqd"){lpAttribute->SetValue("startfreq");break;}if (name == "name" && value == "stopfreqd"){lpAttribute->SetValue("stopfreq");break;}}}//lActionXML.Print();// 将结果转换成string返回 [2016-5-4]TiXmlPrinter printer;lActionXML.Accept(&printer);strnew = printer.CStr();return strnew;}


0 0