MS XML 文档创建
来源:互联网 发布:sql2000导入数据库 编辑:程序博客网 时间:2024/05/16 09:45
要使用MS XML 首先要进行注册msxml(n).dll, 因为MS 已经封装成COM了。现在那MsXML4.dll 为例。
1.首先加载COM:
::CoInitialize(NULL);
2.然后进行IXMLDOMDocument指针的获取,其实就是获得XML DOM 对象:
IUnknown *pUnKnown = NULL;
MSXML2::IXMLDOMDocument *pDomDoc = NULL;
HRESULT hr = CoCreateInstance(__uuidof(MSXML2::DOMDocument30),
NULL, CLSCTX_INPROC_SERVER,
__uuidof(IUnknown), (void ** )&pUnKnown);
if (FAILED (hr))
{
::MessageBeep(0xFFFFFFFF);
}
hr = pUnKnown->QueryInterface(__uuidof(MSXML2::IXMLDOMDocument), (void**) &pDomDoc);
if (FAILED (hr))
{
::MessageBeep(0xFFFFFFFF);
}
pUnKnown->Release();
3. 然后进行节点对象的创建
_bstr_t strFileE = "RootNode";
_bstr_t strSend = "SendNode";
_bstr_t strThid = "Third";
_bstr_t Value = "Value";
_variant_t valueS = "1";
_variant_t valueT = "2";
IXMLDOMElementPtr pFristNode = pDomDoc->createElement(strFileE);
pDomDoc->appendChild(pFristNode);
IXMLDOMElementPtr pSend = pDomDoc->createElement(strSend);
pSend->setAttribute(Value, valueS);
IXMLDOMElementPtr pThird = pDomDoc->createElement(strThid);
pThird->setAttribute(Value, valueT);
pFristNode->appendChild(pSend);
pFristNode->appendChild(pThird);
4. 文档保存:
pDomDoc->save(vt);
5.文档修饰:
因为现在直接存贮,XML是将其存为一行,要让其美观,我们还要加进去/n/t;这样修改如下:
IXMLDOMElementPtr pFristNode = pDomDoc->createElement(strFileE);
pDomDoc->appendChild(pFristNode);
pFristNode->appendChild(pDomDoc->createTextNode(ValueLine));
IXMLDOMElementPtr pSend = pDomDoc->createElement(strSend);
IXMLDOMElementPtr pThird = pDomDoc->createElement(strThid);
pSend->setAttribute(Value, valueS);
pThird->setAttribute(Value, valueT);
pFristNode->appendChild(pSend);
pFristNode->appendChild(pDomDoc->createTextNode(ValueLine));
pFristNode->appendChild(pThird);
pFristNode->appendChild(pDomDoc->createTextNode(ValueLine1));
最后整个源程序:
<RootNode>
<SendNode Value="1"/>
<Third Value="2"/>
</RootNode>
1.首先加载COM:
::CoInitialize(NULL);
2.然后进行IXMLDOMDocument指针的获取,其实就是获得XML DOM 对象:
IUnknown *pUnKnown = NULL;
MSXML2::IXMLDOMDocument *pDomDoc = NULL;
HRESULT hr = CoCreateInstance(__uuidof(MSXML2::DOMDocument30),
NULL, CLSCTX_INPROC_SERVER,
__uuidof(IUnknown), (void ** )&pUnKnown);
if (FAILED (hr))
{
::MessageBeep(0xFFFFFFFF);
}
hr = pUnKnown->QueryInterface(__uuidof(MSXML2::IXMLDOMDocument), (void**) &pDomDoc);
if (FAILED (hr))
{
::MessageBeep(0xFFFFFFFF);
}
pUnKnown->Release();
3. 然后进行节点对象的创建
_bstr_t strFileE = "RootNode";
_bstr_t strSend = "SendNode";
_bstr_t strThid = "Third";
_bstr_t Value = "Value";
_variant_t valueS = "1";
_variant_t valueT = "2";
IXMLDOMElementPtr pFristNode = pDomDoc->createElement(strFileE);
pDomDoc->appendChild(pFristNode);
IXMLDOMElementPtr pSend = pDomDoc->createElement(strSend);
pSend->setAttribute(Value, valueS);
IXMLDOMElementPtr pThird = pDomDoc->createElement(strThid);
pThird->setAttribute(Value, valueT);
pFristNode->appendChild(pSend);
pFristNode->appendChild(pThird);
4. 文档保存:
pDomDoc->save(vt);
5.文档修饰:
因为现在直接存贮,XML是将其存为一行,要让其美观,我们还要加进去/n/t;这样修改如下:
IXMLDOMElementPtr pFristNode = pDomDoc->createElement(strFileE);
pDomDoc->appendChild(pFristNode);
pFristNode->appendChild(pDomDoc->createTextNode(ValueLine));
IXMLDOMElementPtr pSend = pDomDoc->createElement(strSend);
IXMLDOMElementPtr pThird = pDomDoc->createElement(strThid);
pSend->setAttribute(Value, valueS);
pThird->setAttribute(Value, valueT);
pFristNode->appendChild(pSend);
pFristNode->appendChild(pDomDoc->createTextNode(ValueLine));
pFristNode->appendChild(pThird);
pFristNode->appendChild(pDomDoc->createTextNode(ValueLine1));
最后整个源程序:
// testxml.cpp : Defines the entry point for the console application.//#include "stdafx.h"#import "msxml4.dll"using namespace MSXML2;int main(int argc, char* argv[]){::CoInitialize(NULL); // IXMLDOMDocumentPtr IUnknown *pUnKnown = NULL;MSXML2::IXMLDOMDocument *pDomDoc = NULL;HRESULT hr = CoCreateInstance(__uuidof(MSXML2::DOMDocument30), NULL, CLSCTX_INPROC_SERVER, __uuidof(IUnknown), (void ** )&pUnKnown);if (FAILED (hr)){::MessageBeep(0xFFFFFFFF);}hr = pUnKnown->QueryInterface(__uuidof(MSXML2::IXMLDOMDocument), (void**) &pDomDoc);if (FAILED (hr)){::MessageBeep(0xFFFFFFFF);}pUnKnown->Release();pDomDoc->async = VARIANT_FALSE;_variant_t vt = "D://test.xml";VARIANT_BOOL bRet = pDomDoc->load(vt);if (FALSE == bRet){//TRACE0("Open error");} _bstr_t strFileE = "RootNode";_bstr_t strSend = "SendNode";_bstr_t strThid = "Third";_bstr_t Value = "Value";_variant_t valueS = "1";_variant_t valueT = "2";_bstr_t ValueLine = "/n/t";_bstr_t ValueLine1 = "/n"; IXMLDOMElementPtr pFristNode = pDomDoc->createElement(strFileE);pDomDoc->appendChild(pFristNode);pFristNode->appendChild(pDomDoc->createTextNode(ValueLine));IXMLDOMElementPtr pSend = pDomDoc->createElement(strSend);IXMLDOMElementPtr pThird = pDomDoc->createElement(strThid);pSend->setAttribute(Value, valueS);pThird->setAttribute(Value, valueT);pFristNode->appendChild(pSend);pFristNode->appendChild(pDomDoc->createTextNode(ValueLine));pFristNode->appendChild(pThird);pFristNode->appendChild(pDomDoc->createTextNode(ValueLine1));pDomDoc->save(vt);pFristNode->Release();pSend->Release();pThird->Release();pFristNode = NULL;pSend = NULL;pThird = NULL;pDomDoc->Release();::CoUninitialize();return 0;}
xml文档的样子:
其中pDomDoc 没有使用xml中只能指针IXMLDOMDocumentPtr,这里主要是讨论使用,其实在自己封装类的时候,
最后使用智能指针,因为简单而且不易出错。
<RootNode>
<SendNode Value="1"/>
<Third Value="2"/>
</RootNode>
- MS XML 文档创建
- MS Visio软件的XML文档结构
- MS Visio软件的XML文档结构
- C#创建XML文档
- DOM4J创建XML文档
- JDOM创建XML文档
- 创建xml文档对象
- 创建XML文档
- 创建XML文档
- 编程创建XML文档
- DOM4J创建XML文档
- c# 创建xml文档
- DOM4J创建XML文档
- C# 创建XML文档
- C#创建 xml 文档
- DOM4J创建XML文档
- dom4J创建xml文档
- jdom创建XML文档
- HTML 基础及应用
- 改造DNS服务器-Windows系统泛域名解析设置
- 对天乙社区bbscs8实现的详细分析十二
- 对天乙社区bbscs8实现的详细分析十三
- Linear Pachinko
- MS XML 文档创建
- 很酷的视频:在Eclipse里面实时结对编程
- 对天乙社区bbscs8实现的详细分析十四
- 二个星期以来的心烦
- grub和NTFS的问题
- Hibernate作为数据持久层的分析和研究
- 字符,字节和编码
- 读取数据库的死循环
- Struts中的MVC