⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pbdefense.cpp

📁 一个用VC实现对XML编译的源码。在VC6中开发。MSXML为4.0版
💻 CPP
字号:
// pbDefense.cpp : Defines the class behaviors for the application.
//

#include "stdafx.h"
#include "pbDefense.h"

#include "MainFrm.h"
#include "pbDefenseDoc.h"
#include "pbDefenseView.h"

#include "msxml.h"
#import "msxml.dll" //引入类型库 
#import <msxml4.dll> raw_interfaces_only
using namespace MSXML2;

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


_bstr_t XMLTemple="<china><beijing>中国人</beijing> <Shanghai>9</Shanghai></china>"; 


/////////////////////////////////////////////////////////////////////////////
// CPbDefenseApp

BEGIN_MESSAGE_MAP(CPbDefenseApp, CWinApp)
	//{{AFX_MSG_MAP(CPbDefenseApp)
	ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
	// Standard file based document commands
	ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
	ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
	// Standard print setup command
	ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPbDefenseApp construction

CPbDefenseApp::CPbDefenseApp()
{
	// TODO: add construction code here,
	// Place all significant initialization in InitInstance
}

/////////////////////////////////////////////////////////////////////////////
// The one and only CPbDefenseApp object

CPbDefenseApp theApp;

/////////////////////////////////////////////////////////////////////////////
// CPbDefenseApp initialization

BOOL CPbDefenseApp::InitInstance()
{
	AfxEnableControlContainer();

	CoInitialize(NULL);

	// Standard initialization
	// If you are not using these features and wish to reduce the size
	//  of your final executable, you should remove from the following
	//  the specific initialization routines you do not need.

#ifdef _AFXDLL
	Enable3dControls();			// Call this when using MFC in a shared DLL
#else
	Enable3dControlsStatic();	// Call this when linking to MFC statically
#endif

	// Change the registry key under which our settings are stored.
	// TODO: You should modify this string to be something appropriate
	// such as the name of your company or organization.
	SetRegistryKey(_T("Local AppWizard-Generated Applications"));

	LoadStdProfileSettings();  // Load standard INI file options (including MRU)

	// Register the application's document templates.  Document templates
	//  serve as the connection between documents, frame windows and views.

	CSingleDocTemplate* pDocTemplate;
	pDocTemplate = new CSingleDocTemplate(
		IDR_MAINFRAME,
		RUNTIME_CLASS(CPbDefenseDoc),
		RUNTIME_CLASS(CMainFrame),       // main SDI frame window
		RUNTIME_CLASS(CPbDefenseView));
	AddDocTemplate(pDocTemplate);

	// Parse command line for standard shell commands, DDE, file open
	CCommandLineInfo cmdInfo;
	ParseCommandLine(cmdInfo);

	// Dispatch commands specified on the command line
	if (!ProcessShellCommand(cmdInfo))
		return FALSE;

	// The one and only window has been initialized, so show and update it.
	m_pMainWnd->ShowWindow(SW_SHOW);
	m_pMainWnd->UpdateWindow();


//CoUninitialize();

	return TRUE;
}


/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	afx_msg void OnButton1();
	afx_msg void OnButton2();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

// App command to run the dialog
void CPbDefenseApp::OnAppAbout()
{
	CAboutDlg aboutDlg;
	aboutDlg.DoModal();
}

/////////////////////////////////////////////////////////////////////////////
// CPbDefenseApp message handlers


void CAboutDlg::OnButton1() 
{
  
	
	MSXML::IXMLDOMDocumentPtr pDoc; 

	HRESULT hr =pDoc.CreateInstance(__uuidof(MSXML::DOMDocument)); 

		if(!SUCCEEDED(hr)) 

		{ 

		//printf("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!" << endl; 

		MessageBox("no");

		} 

	MSXML::IXMLDOMElementPtr pDocElement=pDoc->createElement("China"); 

	pDoc->appendChild(pDocElement); 

	//cout << "生成树根:\n" << pDoc->xml << endl; 

	MSXML::IXMLDOMElementPtr pNewChildElement; 

	pNewChildElement=pDoc->createElement("Beijing"); 

	pNewChildElement->Puttext("-在人"); 

	pDocElement->appendChild(pNewChildElement); 

	//cout << "添加节点:\n" << pDoc->xml << endl; 

	pNewChildElement=pDoc->createElement("Shanghai"); 

	pNewChildElement->Puttext("众"); 

	pNewChildElement->setAttribute("Weather",_variant_t("Cloudy")); 

	pDocElement->appendChild(pNewChildElement); 

//	cout << "再添加节点:\n" << pDoc->xml << endl; 

	pDocElement->removeChild (pNewChildElement); 




	MSXML::IXMLDOMDocumentPtr pDoc1; 

	HRESULT hr1 =pDoc1.CreateInstance(__uuidof(MSXML::DOMDocument)); 

//	if(!SUCCEEDED(hr1)) 

//	{ 

		//cout << "无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!" << endl; 

//		Exit(); 

//	} 

	pDoc1->loadXML(XMLTemple); 

	//cout << "读取结果:\n" << pDoc->xml << endl; 

	MSXML::IXMLDOMElementPtr pDocElement1=pDoc1->GetdocumentElement(); 

	MSXML::IXMLDOMElementPtr pElement1=pDocElement1->selectSingleNode("Shanghai"); 

//	pDocElement->removeChild(pElement); 

	//cout << "定位删除Shanghai节点:\n" << pDoc->xml << endl; 

//	cout << "保存结果 Save .....(模拟而已)" << endl; 
	VARIANT var;
	VariantInit(&var);
   V_BSTR(&var) = SysAllocString(L"myData.xml");
   V_VT(&var) = VT_BSTR;


	pDoc1->save(var); 
	
	
}


IXMLDOMDocument * DomFromCOM()
{
   HRESULT hr;
   IXMLDOMDocument *pxmldoc = NULL;
   CoCreateInstance(__uuidof(DOMDocument40),
                      NULL,
                      CLSCTX_INPROC_SERVER,
                      __uuidof(IXMLDOMDocument),
                      (void**)&pxmldoc);
   pxmldoc->put_async(VARIANT_FALSE);
   pxmldoc->put_validateOnParse(VARIANT_FALSE);
   pxmldoc->put_resolveExternals(VARIANT_FALSE);
/*
    HRCALL( CoCreateInstance(__uuidof(DOMDocument40),
                      NULL,
                      CLSCTX_INPROC_SERVER,
                      __uuidof(IXMLDOMDocument),
                      (void**)&pxmldoc),
            "Create a new DOMDocument");

    HRCALL( pxmldoc->put_async(VARIANT_FALSE),
            "should never fail");
    HRCALL( pxmldoc->put_validateOnParse(VARIANT_FALSE),
            "should never fail");
    HRCALL( pxmldoc->put_resolveExternals(VARIANT_FALSE),
            "should never fail");
*/
   return pxmldoc;
clean:
   if (pxmldoc)
    {
      pxmldoc->Release();
    }
   return NULL;
}
void CAboutDlg::OnButton2() 
{
	   IXMLDOMDocument *pXMLDom=NULL;
   IXMLDOMParseError *pXMLErr=NULL;
   BSTR bstr = NULL;
   VARIANT_BOOL status;
   VARIANT var;
   HRESULT hr;

   CoInitialize(NULL);

   pXMLDom = DomFromCOM();
   if (!pXMLDom) goto clean;

   bstr = SysAllocString(L"<r>\n<t>top中国人</t>\n<b>bottom11</b>\n</r>");
   pXMLDom->loadXML(bstr, &status);
   /*
   HRCALL(pXMLDom->loadXML(bstr, &status), 
               "dom->loadXML(): ");
			   */
   SysFreeString(bstr);
   if (status!=VARIANT_TRUE) {
      pXMLDom->get_parseError(&pXMLErr);
      pXMLErr->get_reason(&bstr);
/*
   if (status!=VARIANT_TRUE) {
      HRCALL(pXMLDom->get_parseError(&pXMLErr),
               "dom->get_parseError: ");
      HRCALL(pXMLErr->get_reason(&bstr),
               "parseError->get_reason: ");
			   */
//      cout <<"Failed to load DOM from xml string."<<endl;
//      cout<<bstr<<endl;
      goto clean;
   }
   pXMLDom->get_xml(&bstr);
//   HRCALL(pXMLDom->get_xml(&bstr), "dom->get_xml: ");
  // printf("XML DOM loaded from stocks.xml:\n%S\n",bstr);

   VariantInit(&var);
   V_BSTR(&var) = SysAllocString(L"myData222.xml");
   V_VT(&var) = VT_BSTR;
   pXMLDom->save(var);
//   HRCALL(pXMLDom->save(var), "dom->save: ");
 //  cout<<"XML DOM saved to myData.xml\n"<<endl;

clean:
   if (bstr) SysFreeString(bstr);
   if (&var) VariantClear(&var);
   if (pXMLErr) pXMLErr->Release();
   if (pXMLDom) pXMLDom->Release();

   CoUninitialize();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -