1、安裝MSXML 4.0 SP2。在VC6中建立一個基于Dialog的工程。如圖:
在界面上放置3個編輯框、1個按鈕控件。其中屬性設置如下。
編輯框:
?
ID | Category | Variable Type | Variable Name |
IDC_ID | Value | CString | m_strId |
IDC_AUTHOR | Value | CString | m_strAuthor |
IDC_TITLE | Value | CString | m_strTitle |
按鈕:
?
?
ID | Caption |
IDC_GENERATE | Generate |
IDC_LOAD | Load |
?
2、在App類的InitInstance函數里面加入如下代碼:
?// Com口初始化
?AfxOleInit();
?
3、在StdAfx.h中引入動態鏈接庫 MSXML.DLL(C:\windows\system32\msxml4.dll)
?#import? < msxml4.dll >
?
4、雙擊Generate按鈕,在消息處理函數中添加如下代碼:
?UpdateData(TRUE);
MSXML2::IXMLDOMDocumentPtr?pDoc;?
MSXML2::IXMLDOMElementPtr??xmlRoot?;?
?// 創建DOMDocument對象
?HRESULT?hr? = ?pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));?
?if ( ! SUCCEEDED(hr))?
?
?{??
?MessageBox( " 無法創建DOMDocument對象,請檢查是否安裝了MS?XML?Parser?運行庫! " );?
? return ?;
} ?
?// 根節點的名稱為Book
?// 創建元素并添加到文檔中
?xmlRoot = pDoc -> createElement((_bstr_t) " Book " );
?// 設置屬性
?xmlRoot -> setAttribute( " id " ,( const ? char ? * )m_strId);
pDoc -> appendChild(xmlRoot);
MSXML2::IXMLDOMElementPtr?pNode;
?// 添加“author”元素
?pNode = pDoc -> createElement((_bstr_t) " Author " );
pNode -> Puttext((_bstr_t)( const ? char ? * )m_strAuthor);
xmlRoot -> appendChild(pNode);
?// 添加“Title”元素
?pNode = pDoc -> createElement( " Title " );
pNode -> Puttext(( const ? char ? * )m_strTitle);
xmlRoot -> appendChild(pNode);
?// 保存到文件?
?// 如果不存在就建立,存在就覆蓋?
?pDoc -> save( " d:\\he.xml " );
雙擊Load按鈕,在消息處理函數中添加如下代碼:
?MSXML2::IXMLDOMDocumentPtr?pDoc;
HRESULT?hr;
hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
?if (FAILED(hr))
?
?{??
?MessageBox( " 無法創建DOMDocument對象,請檢查是否安裝了MS?XML?Parser?運行庫! " );?
? return ?;
} ?
?// 加載文件?
?pDoc -> load( " d:\\he.xml " );?
MSXML2::IXMLDOMNodePtr??pNode;
?// 在樹中查找名為Book的節點," // "表示在任意一層查找?
?pNode = pDoc -> selectSingleNode( " //Book " );
MSXML2::DOMNodeType?nodeType;?
?// 得到節點類型?
?pNode -> get_nodeType( & nodeType);?
?// 節點名稱?
?CString?strName;
strName = ( char ? * )pNode -> GetnodeName();
?// 節點屬性,放在鏈表中?
?MSXML2::IXMLDOMNamedNodeMapPtr?pAttrMap = NULL;
MSXML2::IXMLDOMNodePtr???pAttrItem;
_variant_t?variantvalue;
pNode -> get_attributes( & pAttrMap);
?long ?count;
count = pAttrMap -> get_length( & count);
pAttrMap -> get_item( 0 , & pAttrItem);
?// 取得節點的值
?pAttrItem -> get_nodeTypedValue( & variantvalue);
m_strId = ( char ? * )(_bstr_t)variantvalue;
UpdateData(FALSE);