VS2008 VC++ XML操作

VS2008 VC++ XML操作  



 

 

1.       msxmlchs.msi的安装

 安装msxml 4.0 sp2时要注意不要用默认安装,要选择自定义安装(全部安装)才能选择安装SDK,若没有选择安装SDk会发现安装完成后安装目录下什么也没有,而选择了SDK的安装可以在目录下看到LIB INC doc 3个文件夹

2.       注册dll

命令行输入如下命令可以弹出注册成功的对话框
cd c:\windows\system32
regsvr32 msxml4.dll (也可在运行框中直接输入这句)

3.       VS2008 设置

工具->选项->项目和解决方案->VC++目录

Include添加INC的的路径C:\Program Files\MSXML 4.0\INC
Library添加INC的的路径C:\Program Files\MSXML 4.0\LIB

 

4.       VC60 设置

Tools->Options... ->Directories tab->Include添加INC的的路径C:\Program Files\MSXML 4.0\INC
Tools->Options... ->Directories tab->Library添加INC的的路径C:\Program Files\MSXML 4.0\LIB

 

5.       新建项目,链接库

代码中#include <msxml2.h>

VC60 open Project Settings by clicking Settings from the Project menu. Select the Link tab. Append "msxml2.lib" to the Object/library modules: textbox.

6.       Code1:

//部分变量无法识别时在前面加命名空间MSXML2::

#include <stdio.h>

#import <msxml4.dll>

using namespace MSXML2;

int main(int argc, char* argv[])

{

     MSXML2::IXMLDOMDocument2Ptr pXMLDom;

HRESULT hr;

CoInitialize(NULL);

hr = pXMLDom.CreateInstance(__uuidof(DOMDocument40));

if (FAILED(hr))

{

printf("Failed to CreateInstance on an XML DOM");

return NULL;

}

pXMLDom->preserveWhiteSpace = VARIANT_TRUE;

// Create a processing instruction targeted for xml.

MSXML2::IXMLDOMProcessingInstructionPtr pi;

pi = pXMLDom->createProcessingInstruction("xml", "version='1.0'");

if (pi != NULL) {

pXMLDom->appendChild(pi);

pi.Release();

}

// Create a processing instruction targeted for xml-stylesheet.

pi = pXMLDom->createProcessingInstruction("xml-stylesheet",

"type='text/xml' href='dom.xsl'");

if (pi != NULL) {

pXMLDom->appendChild(pi);

pi.Release();

}

// Create a comment for the document.

MSXML2::IXMLDOMCommentPtr pc;

pc = pXMLDom->createComment("sample xml file created using XML DOM object.");

if (pc != NULL) {

pXMLDom->appendChild(pc);

pc.Release();

}

// Create the root element (i.e., the documentElement).

MSXML2::IXMLDOMElementPtr pe;

pe = pXMLDom->createElement("root");

// Create a "created" attribute for the root element and

// assign the "using dom" character data as the attribute value.

MSXML2::IXMLDOMAttributePtr pa;

pa = pXMLDom->createAttribute("created");

if (pa != NULL)

{

pa->value = "using dom";

pe->setAttributeNode(pa);

pa.Release();

}

// Add the root element to the DOM instance.

pXMLDom->appendChild(pe);

pe.Release();

// Next, we will create and add more nodes to the root element

// we've just created.

// Create an element to hold text content.

pe = pXMLDom->createElement("node1");

if (pe != NULL)

{

// Add newline + tab for indentation.

pXMLDom->documentElement->appendChild(pXMLDom->createTextNode("\n\t"));

pe->text = "some character data";

pXMLDom->documentElement->appendChild(pe);

pe.Release();

}

// Create an element to hold a CDATA section.

pe=pXMLDom->createElement("node2");

if (pe != NULL)

{

// Add newline + tab for indentation.

pXMLDom->documentElement->appendChild(pXMLDom->createTextNode("\n\t"));

MSXML2::IXMLDOMCDATASectionPtr pcd;

pcd = pXMLDom->createCDATASection("<some mark-up text>");

if (pcd != NULL) {

pe->appendChild(pcd);

pcd.Release();

}

pXMLDom->documentElement->appendChild(pe);

pe.Release();

}

// Create an element to hold three empty subelements.

pe=pXMLDom->createElement("node3");

if (pe != NULL)

{

// Add newline +tab for indentation.

pXMLDom->documentElement->appendChild(pXMLDom->createTextNode("\n\t"));

MSXML2::IXMLDOMDocumentFragmentPtr pdf;

pdf = pXMLDom->createDocumentFragment();

pdf->appendChild(pXMLDom->createTextNode("\n\t\t"));

pdf->appendChild(pXMLDom->createElement("subNode1"));

pdf->appendChild(pXMLDom->createTextNode("\n\t\t"));

pdf->appendChild(pXMLDom->createElement("subNode2"));

pdf->appendChild(pXMLDom->createTextNode("\n\t\t"));

pdf->appendChild(pXMLDom->createElement("subNode3"));

pdf->appendChild(pXMLDom->createTextNode("\n\t"));

pe->appendChild(pdf);

pdf.Release();

pXMLDom->documentElement->appendChild(pe);

pe.Release();

pXMLDom->documentElement->appendChild(pXMLDom->createTextNode("\n"));

}

printf("Dynamically created DOM:\n%s\n",

(LPCSTR)pXMLDom->xml);

hr = pXMLDom->save("dynaDom.xml");

if (FAILED(hr))

{

printf("Failed to save DOM to dynaDom.xml\n");

}

else

{

printf("DOM saved to dynamDom.xml\n");

}

if (pXMLDom) pXMLDom.Release();

CoUninitialize();

return 0;

}

结果:

Dynamically created DOM:

<?xml version="1.0"?>

<?xml-stylesheet type='text/xml' href='dom.xsl'?>

<!--sample xml file created using XML DOM object.-->

<root created="using dom">

        <node1>some character data</node1>

        <node2><![CDATA[<some mark-up text>]]></node2>

        <node3>

                <subNode1/>

                <subNode2/>

                <subNode3/>

        </node3>

</root>

 

DOM saved to dynamDom.xml

7.       Code2(未编译验证):

#include <stdio.h>

#include <msxml2.h>

 

// You might need to add the msxml4/sdk/(inc, lib) directories

// to the Tools->Options...->Directories in Visual Studio.

//

// You might also need to append "msxml2.lib" to the

// Project->Settings...->Link->Object/Libray Modules field.

 

int main(int argc, char* argv[])

{

   HRESULT hr;

   IXMLDOMDocument3 *pXMLDoc = NULL;

   IXMLDOMParseError * pObjError = NULL;

   BSTR bstr = NULL;

   VARIANT_BOOL status;

   VARIANT vSrc;

 

   CoInitialize(NULL);

 

   hr = CoCreateInstance(CLSID_DOMDocument40,

                     NULL,

                     CLSCTX_INPROC_SERVER,

                     IID_IXMLDOMDocument3,

                     (void**)&pXMLDoc);

 

   if (FAILED(hr))

   {

      printf("Failed to CoCreate an instance of an XML DOM\n");

      printf("Error code: %x\n", hr);

      goto clean;

   }

 

   hr = pXMLDoc->put_async(VARIANT_FALSE);

   if (FAILED(hr))

   {

      printf("Failed to set async property\n");

      goto clean;

   }

 

   hr = pXMLDoc->put_validateOnParse(VARIANT_FALSE);

   if (FAILED(hr))

   {

      printf("Failed to set validateOnParse\n");

      goto clean;

   }

 

   hr = pXMLDoc->put_resolveExternals(VARIANT_FALSE);

   if (FAILED(hr))

   {

      printf("Failed to disable resolving externals.\n");

      goto clean;

   }

 

   VariantInit(&vSrc);

   V_BSTR(&vSrc) = SysAllocString(L"stocks.xml");

   V_VT(&vSrc) = VT_BSTR;

 

   hr = pXMLDoc->load(vSrc, &status);

 

   if(status!=VARIANT_TRUE)

   {

      hr = pXMLDoc->get_parseError(&pObjError);

      hr = pObjError->get_reason(&bstr);

      printf("Failed to load DOM from books.xml. %S\n",bstr);

      goto clean;

   }

 

   hr = pXMLDoc->get_xml(&bstr);

   printf("stocks.xml:\n%S\n", bstr);

 

clean:  

   if (bstr)

      SysFreeString(bstr);

   if (&vSrc)

      VariantClear(&vSrc);

   if (pObjError)

      pObjError->Release();

   if (pXMLDoc)

      pXMLDoc->Release();

   CoUninitialize();

   return 0;

 

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值