读写XML文件中的文本--new

本文介绍如何使用C++及MSXML库进行XML文件的加载、节点遍历、子节点读取、创建与插入等操作。包括初始化COM、创建解析器实例、设置解析器行为、加载XML文档、遍历特定节点集合、创建并插入新节点等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

一、首先在程序适当的地方加入

#include <atlbase.h>
#import 
"msxml3.dll"
using namespace MSXML2;

 

二、装载XML文档

CoInitialize(NULL); // 初始化COM,初始化当前线程使用什么样的套间

//CComPtr<MSXML::IXMLDOMDocument> //通过智能指针创建解析器实例
CComPtr<IXMLDOMDocument> spXMLDOM; // DOM---文档对象模型

spXMLDOM.CoCreateInstance(_uuidof(DOMDocument));

// DOMDocument对象暴露了下面几个属性,允许用户在运行的时候改变解析器的行为
spXMLDOM->put_async(VARIANT_FALSE); 
spXMLDOM
->put_validateOnParse(VARIANT_FALSE);
spXMLDOM
->put_resolveExternals(VARIANT_FALSE);
spXMLDOM
->put_preserveWhiteSpace(VARIANT_TRUE);

spXMLDOM
->load(xxxpath);

// 一些定义
CComPtr<IXMLDOMNodeList> spNODES = NULL;
CComPtr
<IXMLDOMNodeList> spCHILDS = NULL;

CComPtr
<IXMLDOMNode>     spNode = NULL;
CComPtr
<IXMLDOMNode>     spChildNode = NULL;

 

三、遍历某类节点

_bstr_t bstrNodeName = "xxxx";
spNODES 
= spXMLDOM->getElementsByTagName(bstrNodeName);  // 得到这类节点的集合
spNODES->reset(); // ??有必要??

// 方法一
long n = spNODES->Getlength();
for(long i=0; i<n; i++
{
    spNode 
= spNODES->nextNode();
    
// 一些处理,例如
    CString aa = spNode->Gettext();
}



// 方法二
for (long j=0; j<spNODES->length; j++
{
    spNode 
= spNODES->Getitem(j);
    
// 一些处理,例如
    CString aaa = spNode->text.copy();
}

 

四、创建、插入子节点

// 创建新节点
CComPtr<IXMLDOMNode> spNewNode;
spNewNode 
= spXMLDOM->createNode(CComVariant(NODE_ELEMENT),_bstr_t("newnode"),_bstr_t("xxx"));
CComQIPtr
<IXMLDOMElement> spNewElement;
spNewElement 
= spNewNode; // 如果要向新创建的节点添加属性,就必须通过其作为“元素”的一面来访问它
spNewElement->setAttribute(_bstr_t("mm"), CComVariant("yy")); //设置属性
spNewNode->Puttext(_bstr_t("hello"));

// 插入新节点
spNode = spXMLDOM->selectSingleNode("dad/paragraph"); // 要写父节点的全路径!
spNode->appendChild(spNewNode);

// 保存
spXMLDOM->save("C:/xxx.xml");

 

五、读取子节点

// 类似的
CComPtr<IXMLDOMNodeList> spCHILDS = spNode->GetchildNodes();
// 即可
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值