TinyXml快速入门(三)
发布时间:2020-12-16 06:09:15 所属栏目:百科 来源:网络整理
导读:作者:朱金灿 来源: http://www.cnblogs.com/clever101 在《 TinyXml 快速入门(二) 》介绍使用 tinyxml 库获取 xml 文件声明,查询指定节点、删除指定节点的做法。在本文中继续介绍 修改指定节点和增加节点的做法。 修改节点其实和查询指定节点的值有点类
作者:朱金灿 来源:http://www.cnblogs.com/clever101 在《TinyXml快速入门(二)》介绍使用tinyxml库获取xml文件声明,查询指定节点、删除指定节点的做法。在本文中继续介绍修改指定节点和增加节点的做法。
修改节点其实和查询指定节点的值有点类似,也分为两个函数,一个实现修改文本。另一个负责修改属性。
/*
!
*brief修改指定节点的文本。 * *paramXmlFilexml文件全路径。 *paramstrNodeName指定的节点名。 *paramstrText重新设定的文本的值 *return是否成功。true为成功,false表示失败。 */ bool ModifyNode_Text( const std:: string & XmlFile, string & strNodeName,255)">string & strText) { // 定义一个TiXmlDocument类指针 TiXmlDocument * pDoc = new TiXmlDocument(); if (NULL == pDoc) { return false ; } pDoc -> LoadFile(XmlFile); TiXmlElement * pRootEle = pDoc -> RootElement(); if (NULL == pRootEle) { false ; } TiXmlElement * pNode = NULL; GetNodePointerByName(pRootEle,strNodeName,pNode); if (NULL != pNode) { pNode -> Clear(); 首先清除所有文本 然后插入文本,保存文件 TiXmlText * pValue = new TiXmlText(strText); pNode -> LinkEndChild(pValue); pDoc -> SaveFile(XmlFile); true ; } else false ; } ! *brief修改指定节点的属性值。 * *paramXmlFilexml文件全路径。 *paramstrNodeName指定的节点名。 *paramAttMap重新设定的属性值,这是一个map,前一个为属性名,后一个为属性值 *return是否成功。true为成功,false表示失败。 bool ModifyNode_Attribute( const std::map < std:: string ,std:: string > & AttMap) { typedefstd::pair < std:: string > String_Pair; false ; } TiXmlElement * pNode = NULL; GetNodePointerByName(pRootEle,255)">if (NULL != pNode) { TiXmlAttribute * pAttr = NULL; std:: string strAttName = _T( "" ); std:: string strAttValue = _T( "" ); for (pAttr = pNode -> FirstAttribute();pAttr;pAttr = pAttr -> Next()) { strAttName = pAttr -> Name(); std::map < std:: string > ::const_iteratoriter; for (iter = AttMap.begin();iter != AttMap.end();iter ++ ) { if (strAttName == iter -> first) { pAttr -> SetValue(iter -> second); } } } pDoc -> SaveFile(XmlFile); else { false ; } }
对于ModifyNode_Attribute函数,这里稍微介绍一下如何使用,比如对于下面这样一个xml文件: <?
xmlversion="1.0"encoding="utf-8"standalone="yes"
?>
< MyApp > Messages Welcome > WelcometoMyApp </ Farewell > ThankyouforusingMyApp Windows Window name ="MainFrame" x ="5" y ="15" w ="400" h ="250" /> Connection ip ="192.168.0.1" timeout ="123.456000" > 我们如果要修改节点的Connection的ip为192.168.0.100,timeout为1000,我们可以这样用:
std::
string
XmlFile
=
_T(
"
E:TestTinyxmlexample4.xml
"
);
std:: string strNodeName = _T( Connection " ); typedefstd::pair < std:: string > String_Pair; std::map < std:: string > AttMap; AttMap.insert(String_Pair(_T( ip " ),_T( 192.168.0.100 " ))); AttMap.insert(String_Pair(_T( timeout 1000 " ))); ModifyNode_Attribute(XmlFile,AttMap); 下面是增加节点的两个函数: !
*brief增加指定节点的文本。 * *paramXmlFilexml文件全路径。 *paramstrParNodeName要增加的节点的父节点。 *paramstrNodeName指定的节点名。 *paramstrText要增加的文本 *return是否成功。true为成功,false表示失败。 bool AddNode_Text( string & strParNodeName,strParNodeName,255)">if (NULL != pNode) { 生成子节点:pNewNode TiXmlElement * pNewNode = new TiXmlElement(strNodeName); if (NULL == pNewNode) { false ; } 设置节点文本,然后插入节点 TiXmlText * pNewValue = new TiXmlText(strText); pNewNode -> LinkEndChild(pNewValue); pNode -> InsertEndChild( * pNewNode); pDoc -> SaveFile(XmlFile); false ; } ! *brief增加节点。 * *paramXmlFilexml文件全路径。 *paramstrParNodeName要增加的节点的父节点。 *paramstrNodeName指定的节点名。 *paramAttMap要增加的节点设定的属性值,这是一个map,前一个为属性名,后一个为属性值 *return是否成功。true为成功,false表示失败。 bool AddNode_Attribute( string strNodeName,255)">string > & AttMap) { 设置节点的属性值,然后插入节点 std::map < std:: for (iter = AttMap.begin();iter != AttMap.end();iter ++ ) { pNewNode -> SetAttribute(iter -> first,iter -> second); } pNode -> InsertEndChild( * pNewNode); pDoc -> SaveFile(XmlFile); false ; }
代码修改记录: 2010.04.08.在上面各个函数的参数增加const修饰符。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |