Microsoft Dom xml写入与读取操作笔记

写xml函数。文件内部路径:all->parent->child,child属性:AA,BB,CC

void writexml()
{
	MSXML2::IXMLDOMDocumentPtr pDoc = NULL;
	MSXML2::IXMLDOMElementPtr  pNode = NULL;
	MSXML2::IXMLDOMElementPtr  pNode2 = NULL;
	MSXML2::IXMLDOMElementPtr  xmlRoot = NULL;
	MSXML2::IXMLDOMNamedNodeMapPtr pAttrMap = NULL;
	MSXML2::IXMLDOMNodePtr   pAttrItem = NULL;
	_variant_t variantvalue;
	HRESULT hr;

	hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
	// 是否安装了MS XML Parser 运行库
	if (FAILED(hr))		return ;	

	char* AA = "aa";
	char* BB = "bb";
	char* CC = "cc";

	char* szXmlPath = "D:\\test.xml";
	pDoc->load(szXmlPath);
	xmlRoot = pDoc->selectSingleNode("all");
	if(xmlRoot == NULL)
	{
		xmlRoot = pDoc->createElement(_bstr_t::_bstr_t("all"));
		if(xmlRoot == NULL)		return ;
		pDoc->appendChild(xmlRoot);
	}

	pNode = xmlRoot->selectSingleNode("parent");
	if(pNode == NULL)
	{
		pNode = pDoc->createElement(_bstr_t::_bstr_t("parent"));
		if(pNode == NULL)		return ;
		xmlRoot->appendChild(pNode);
	}

	pNode2 = pNode->selectSingleNode("child");
	if(pNode2 == NULL)
	{
		pNode2 = pDoc -> createElement(_bstr_t::_bstr_t("child"));
		if(pNode2 == NULL)		return ;
		pNode->appendChild(pNode2);
	}

	pNode2->setAttribute( _bstr_t::_bstr_t("AA"), AA);
	pNode2->setAttribute( _bstr_t::_bstr_t("BB"), BB);
	pNode2->setAttribute( _bstr_t::_bstr_t("CC"), CC);

	pDoc->save(szXmlPath);
}


读xml函数。函数执行后szValue将存放要读取的属性的值。

// 索引查找节点属性的值
// szFilePath 为文件路径, szXmlPath 为节点路径
// szAtrribute 为索引的属性,szValue 为索引属性的值(传出参数)
bool CXmlOperate::GetXmlValue(char* szFilePath, char* szXmlPath, char* szAttribute, char* szValue)
{
	if(szValue == NULL)		return false;	// 传入缓冲区为空
	if(szFilePath == NULL)		return false;	// 传入文件路径为空
	if(szXmlPath == NULL)		return false;	// 传入属性路径为空
	if(szAttribute == NULL)		return false;	// 传入属性为空
	MSXML2::IXMLDOMDocumentPtr pDoc;
	MSXML2::IXMLDOMNodePtr  pNode;
	MSXML2::IXMLDOMNamedNodeMapPtr pAttrMap = NULL;
	MSXML2::IXMLDOMNodePtr   pAttrItem = NULL;
	HRESULT hr;
	hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
	// 是否安装了MS XML Parser 运行库
	if (FAILED(hr))		return  false;	

	pDoc->load(szFilePath);
	pNode = pDoc->selectSingleNode(szXmlPath);
	if(pNode == NULL)	return false;

	_variant_t variantvalue;
	pNode->get_attributes(&pAttrMap);
	if(pAttrMap == NULL)	return false;
	pAttrItem = pAttrMap->getNamedItem(szAttribute);
	if(pAttrItem == NULL)	return false;
	pAttrItem->get_nodeTypedValue(&variantvalue);
	strcpy(szValue, (char*)(_bstr_t)variantvalue);

	return true;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值