作者:朱金灿
来源: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 ;
}
}
*\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 ;
}
}