MFC写XML文件 以及 删除节点

来源:互联网 发布:内存卡恢复数据 编辑:程序博客网 时间:2024/06/01 16:17

转自:http://bbs.csdn.net/topics/300026982

包含库文件不变:#import "msxml3.dll"

命名空间不变:using namespace MSXML2;

示例代码如下:

//初始化

CoInitialize(NULL);
// 创建文档
MSXML2::IXMLDOMDocument2Ptr pXMLDoc = NULL;
pXMLDoc.CreateInstance("Msxml2.DOMDocument.3.0");
// Create the Processing Instruction
MSXML2::IXMLDOMProcessingInstructionPtr pXMLProc = NULL;
pXMLProc = pXMLDoc->createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'");
// Insert the Processing Instruction
_variant_t vNullVal;
vNullVal.vt = VT_NULL;
pXMLDoc->insertBefore(pXMLProc, vNullVal);
// 创建根结点
_variant_t varNodeType((short)MSXML2::NODE_ELEMENT);
MSXML2::IXMLDOMNodePtr pXMLNodeRoot= NULL; 
pXMLNodeRoot = pXMLDoc->createNode(varNodeType, _T("Root"), _T(""));
// 添加根结点
pXMLDoc->appendChild(pXMLNodeRoot);
// 创建并添加下级结点
MSXML2::IXMLDOMNodePtr pXMLNodeNode= NULL; 
pXMLNodeNode = pXMLNodeRoot->appendChild(pXMLDoc->createElement(_T("Node1")));
pXMLNodeNode = pXMLNodeRoot->appendChild(pXMLDoc->createElement(_T("Node2")));
// 创建并设置下级结点属性(3个:姓名、性别、年龄)
MSXML2::IXMLDOMAttributePtr pXMLAttr = NULL;
pXMLAttr = pXMLDoc->createAttribute(_T("name"));
pXMLAttr->nodeTypedValue = "王进";
pXMLNodeNode->attributes->setNamedItem(pXMLAttr);
pXMLAttr = pXMLDoc->createAttribute(_T("sex"));
pXMLAttr->nodeTypedValue = "男";
pXMLNodeNode->attributes->setNamedItem(pXMLAttr);
pXMLAttr = pXMLDoc->createAttribute(_T("age"));
pXMLAttr->nodeTypedValue = "80";
pXMLNodeNode->attributes->setNamedItem(pXMLAttr);
// 创建下级元素结点
MSXML2::IXMLDOMElementPtr pXMLEle = NULL;
pXMLEle = pXMLDoc->createElement(_T("file"));
pXMLEle->appendChild(pXMLDoc->createTextNode("Element"));
// 添加元素结点
pXMLNodeNode->appendChild( pXMLEle );
/*
// 创建下级元素结点
MSXML2::IXMLDOMElementPtr pXMLEleSub = NULL;
pXMLEleSub = pXMLDoc->createElement(_T("file"));
pXMLEleSub->appendChild(pXMLDoc->createTextNode("SubElement"));
// 添加下级元素结点
pXMLEle->appendChild( pXMLEleSub );
*/
// 保存文档
pXMLDoc->save(_T("d:\\Test.xml"));

CoUninitialize();

 

总结:当节点下无元素时,节点不会展开

 

 删除节点:

pNodeList->get_item(i,&pNode);
pNod->removeChild(pNode,&moldNode);
moldNode->Release();

自己在IniToXml工程中使用时发现removeChild函数只接收一个参数:即pNode

此外:当从某个index开始删除之后所有的节点时,get_item(i,&pNode)中的 i 不能是递增的,因为每删掉一个节点,就会有之后的节点移到前面来。






原创粉丝点击