C++ 操作XML的完整例子——MSXML篇
写本文的目的是为了方便大家了解C++ MSXML操作方法。
当然,C++中对MSXML的调用有多种,本文采用的方法是完全参照MSXML SDK提供的文档进行操作。
如果有什么错误,欢迎指正。
代码框架是基于vs2008 MFC 对话框程序(UNICODE)。对话框程序需要读者自己创建。
#include <msxml6.h>
#include <comutil.h>
#pragma comment(lib, "comsuppwd.lib")
void CXmlSampleDlg::OnBnClickedButton1()//按钮事件
{
CoInitialize(NULL);
CComPtr<IXMLDOMDocument> spXmldoc;
HRESULT hr = spXmldoc.CoCreateInstance(L"MSXML2.DOMDocument.6.0");
if(SUCCEEDED(hr))
{
VARIANT_BOOL isSuccessFul;
CComVariant varXmlFile(L"a.xml");
spXmldoc->put_async(VARIANT_FALSE);
HRESULT hr= spXmldoc->load(varXmlFile, &isSuccessFul);
if(isSuccessFul==VARIANT_TRUE)
{
CComBSTR bstrXml;
CComPtr<IXMLDOMElement> spRoot=NULL;
CComPtr<IXMLDOMElement> spTheBook=NULL;
CComPtr<IXMLDOMElement> spTheElem=NULL;
CComPtr<IXMLDOMNode> spNewNode=NULL;
hr = spXmldoc->get_documentElement(&spRoot);
spRoot->get_xml(&bstrXml);
AfxMessageBox(L"1, 原始的XML");
AfxMessageBox(bstrXml);
spXmldoc->createElement(L"book", &spTheBook);
spXmldoc->createElement(L"name", &spTheElem);
spXmldoc->put_text(L"新书");
spTheBook->appendChild(spTheElem, &spNewNode);
spTheElem.Release();
spNewNode.Release();
spXmldoc->createElement(L"price", &spTheElem);
spTheElem->put_text(L"20");
spTheBook->appendChild(spTheElem, &spNewNode);
spTheElem.Release();
spNewNode.Release();
spXmldoc->createElement(L"memo", &spTheElem);
spTheElem->put_text(L"新书的更好看。");
spTheBook->appendChild(spTheElem, &spNewNode);
spNewNode.Release();
spTheElem.Release();
spRoot->appendChild(spTheBook, &spNewNode);
spNewNode.Release();
spTheBook.Release();
spRoot->get_xml(&bstrXml);
AfxMessageBox(L"2, 新建一本书完成");
AfxM
相关文档:
标签:
it
分类:C/C++
我的回忆和有趣的故事 --- C/C++圣战篇
李维
------------------------------------------------------------------------------------------
声明
以下的这篇文章内容是我个人的回忆以及看法,没有任何特别的偏见,许多的事情是根据我的记忆以及从许多人的诉说中得知的,也许内容不是百分 ......
C/C++
/*
* File: main.cpp
* Author: Vicky
*
* Created on 2010年4月29日, 上午9:46
*/
#include <iostream>
using namespace std;
int maximum(int[], int);
int main(int argc, char** argv) {
// int sg[3][4] = {
int sg[][4] = {
{68, 77, 73, 86},
{87, 96, 7 ......
#include <assert.h> //设定插入点
#include <ctype.h> //字符处理
#include <errno.h> //定义错误码
#include <float.h> //浮点数处理
#include <fstream.h> //文件输入/输出
#include ......
/*
*算法原理:将图G 中的边按权数从小到大逐条考察,
* 按不构成圈的原则加入到T中(若有选择时, 不同的选
* 择可能会导致最后生成树的权数不同), 直到
* q(T) = p(G)-1为止, 即 T 的边数 = G 的顶点1 为止.
*算法中无圈性的判定比较麻烦,应该用标记法最好,
*对各个分支的顶点标号。
*我没仔细� ......
Create:
int nFQ;
XmlDocument doc = new XmlDocument();
XmlAttribute
newAtt;
//定义XML文档头文件
XmlDeclaration dec =
doc.CreateXmlDeclaration("1.0",null,null);
doc.AppendChild(dec);
&n ......