VC++利用微软msxml3.dll创建xml文件

VC6.0下创建xml文件有很多方式,尝试了timyxml,但是他不支持文件声明等的写入,因此转战MSXML

MSXML有很多版本,这里用的是msxml3

首先在头文件中引入

#import "msxml3.dll"
using namespace MSXML2;

其次编写创建xml文件方法
void CCVideoDlg::CreateXML() 
{
    MSXML2::IXMLDOMDocument2Ptr pXMLDom;
    MSXML2::IXMLDOMProcessingInstructionPtr pi;
    HRESULT hr;
    CoInitialize(NULL);
    hr = pXMLDom.CreateInstance(__uuidof(DOMDocument));
    if (FAILED(hr))
    {
        printf("Failed to CreateInstance on an XML DOM");
        
    }
    pXMLDom->preserveWhiteSpace = VARIANT_TRUE;
	//添加声明
    pi = pXMLDom->createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'");
    if (pi != NULL) {
        pXMLDom->appendChild(pi);
        pi.Release();
    }
	//创建样式表
    pi = pXMLDom->createProcessingInstruction("xml-stylesheet","type='text/xsl' href='./../utils/detail.xsl'");
    if (pi != NULL) {
        pXMLDom->appendChild(pi);
        pi.Release();
    }
    // 创建注释
    MSXML2::IXMLDOMCommentPtr pc;
    pc = pXMLDom->createComment("xmlReport.xml created using XML DOM object.");
    if (pc != NULL) {
        pXMLDom->appendChild(pc);
        pc.Release();
    }
  
	char CurrentDateTime[32];  
	getCurrentTime(CurrentDateTime);
	// 创建root节点
        MSXML2::IXMLDOMElementPtr pb,pd;
	pb= pXMLDom->createElement("body");
	pXMLDom->appendChild(pb);

	pd = pXMLDom->createElement("Details");
	MSXML2::IXMLDOMAttributePtr pa;
    pa = pXMLDom->createAttribute("time");
    if (pa != NULL)
    {
        pa->value = CurrentDateTime;
        pd->setAttributeNode(pa);
    } 
	pa = pXMLDom->createAttribute("threshold");
    if (pa != NULL)
    {
		CString threadThold;
		threadThold.Format("%d",m_sliderCtrl.GetPos());
        pa->value = (_bstr_t)threadThold;
        pd->setAttributeNode(pa);
    } 
	pa = pXMLDom->createAttribute("diffPercent");
    if (pa != NULL)
    {
		CString diff;
		GetDlgItemText(IDC_diffRateEDIT1,diff);
        pa->value =(_bstr_t)diff;
        pd->setAttributeNode(pa);
    } 
	pb->appendChild(pd);
	pb->appendChild(pXMLDom->createTextNode("\n\t"));
	//释放节点
	pd.Release();

	pb.Release();


    hr = pXMLDom->save((_variant_t)saveXMLReportName);
    if (FAILED(hr))
    {
        printf("Failed to save DOM to xmlReport.xml\n");
    }
    else
    {
        printf("DOM saved to xmlReport.xml\n");
    }
    if (pXMLDom) 
		pXMLDom.Release();
    CoUninitialize();
}
void CCVideoDlg::AddXMLNode(CString filePath,CString snapTimes,char currentTime[32],CString cameraId,int countNum,CString state)
{


	MSXML2::IXMLDOMDocument2Ptr pDoc;
	HRESULT hr = pDoc.CreateInstance( __uuidof(MSXML2::DOMDocument30), NULL, CLSCTX_INPROC_SERVER);
    if (FAILED(hr))
    {
        printf("Failed to CreateInstance on an XML DOM");
        
    }
	pDoc->async = VARIANT_FALSE;
	pDoc->validateOnParse = VARIANT_FALSE;	
	pDoc->resolveExternals = VARIANT_FALSE;	
	if( pDoc->load((_variant_t)filePath) != VARIANT_TRUE)		
	{		
		printf("Fail reason: %s\n", (LPCSTR)pDoc->parseError->Getreason());		
	}
	else
	{
	
		MSXML2::IXMLDOMNodePtr pNode = pDoc->selectSingleNode(L"body/RESULTS");
		//首先要找到RESULTS节点,因为是要在它之后插入
		pNode->appendChild(pDoc->createTextNode("\n\t"));
		MSXML2::IXMLDOMElementPtr pResultNode=pDoc->createNode(CComVariant(NODE_ELEMENT),"RESULT","");
		pResultNode->appendChild(pDoc->createTextNode("\n\t"));
		pNode->appendChild(pResultNode);
		pNode.Release();
	
		pResultNode->setAttribute("snapTimes",(_bstr_t)snapTimes);
		pResultNode->setAttribute("currentTime",currentTime);
		pResultNode->setAttribute("TV_Name",(_bstr_t)cameraId);
		CString strNums;
		strNums.Format("%d",countNum);
		pResultNode->setAttribute("diffPercent",(_bstr_t)strNums);
		pResultNode->setAttribute("state",(_bstr_t)state);
		//图片路径节点
		CString imgSrc;
		imgSrc.Format("%s_%s.jpeg",currentTime,snapTimes);
		pResultNode->setAttribute("imgSrc",(_bstr_t)imgSrc);
		pDoc->save((_variant_t)filePath);	
		pResultNode.Release(); 
		
    }

	if (pDoc) 
		pDoc.Release();
}



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
msxml3.dll是一种动态链接库文件,它是Microsoft XML Core Services的一部分,用于处理XML数据的解析和管理。当出现"msxml3.dll 安全频道支持错误"时,通常说明XML数据的安全性认证或加密过程发生了错误。 这种错误通常出现在使用网络通信协议(如HTTPS)传输XML数据时。安全频道支持是一种用于确保数据传输的机制,它使用加密和数字证书等技术来保护数据的完整性和安全性。当在与远程服务器进行通信的过程中,XML数据的安全频道支持检测到错误,就会导致出现这个错误提示。 要解决这个问题,可以尝试以下几种方法: 1. 更新或重新安装Microsoft XML Core Services:这个错误可能是由于msxml3.dll文件损坏或丢失所致。可以通过访问Microsoft官方网站下载最新的XML Core Services包,然后安装或更新该软件来解决问题。 2. 检查网络连接和安全设置:这个错误可能是由于网络连接问题或安全设置不正确所致。确保网络连接正常并且没有被防火墙或安全软件阻止。还可以尝试调整Internet Explorer或其他网络软件的安全级别,以确保能够正确执行安全频道支持。 3. 检查远程服务器证书:当使用HTTPS协议进行通信时,需要检查和验证远程服务器的数字证书。确保证书合法有效,并且可以正确地与远程服务器建立安全连接。 4. 联系软件开发者或技术支持:如果以上方法都无法解决问题,建议联系软件开发者或技术支持寻求帮助。他们可能需要详细的错误信息和日志来诊断和解决问题。 总之,"msxml3.dll 安全频道支持错误"通常与XML数据的安全性认证或加密过程中出现问题有关。通过更新或重新安装Microsoft XML Core Services、检查网络连接和安全设置、验证远程服务器证书等方法,可以尝试解决这个问题。如果问题仍然存在,建议联系软件开发方或技术支持获得进一步的帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值