MSXML读写的例子
1、目标文档:
<book id="bk101">
<author>lizlex</author>
<title>XML Developer's Guide</title>
</book>
2、步骤:
(1)在StdAfx.h中引入动态链接库 MSXML.DLL(C:\windows\system32\msxml4.dll)
#import <msxml4.dll>
(2)界面设计:
分别放入三个Text,用于输入数据,与显示文档内容用,并添加关联的成员变量m_strId,m_strAuthor, m_strTitle;并添加确定按钮:
(3)产生文档的程序片断
void CXmlparseDlg::OnButtonGenerate()
{
UpdateData();
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");
}
(4)读取XML文档的程序片断
void CXmlparseDlg::OnButtonLoad()
{
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);
}
VC2008平台示例代码:
包含文件:
#import <msxml3.dll>
using namespace MSXML2;
HRESULT hr;
MSXML2::IXMLDOMDocument * pDoc;
MSXML2::IXMLDOMNodeListPtr list;
//
hr = CoInitialize(NULL);
// Check the return value, hr
hr = CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER,
IID_IXMLDOMDocument, (void**)&pDoc);
// Check the return value, hr

//创建DOMDocument对象
if(!SUCCEEDED(hr))
{
AfxMessageBox(_T("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!"));
return TRUE;
}
CString xml(_T("F:\\VC9\\class.xml"));
pDoc->load(CComVariant(xml.AllocSysString()));
list = pDoc->documentElement->childNodes;
CString value;
for(int i = 0 , l = list->length ; i < l ; ++i)
{
MSXML2::IXMLDOMNodeListPtr childs = list->item[i]->childNodes;
long clen = childs->length;
_bstr_t v = childs->item[0]->text;
_bstr_t v2 = childs->item[1]->text;
}
AfxMessageBox(value);
CoUninitialize();
XML文件:
<?xml version="1.0" encoding="utf-8" ?>
<root>
<item>
<name>currentStyle</name><![CDATA[代表了在全局样式表、内嵌样式和 HTML 标签属性中指定的对象格式和样式。 ]]>
</item>
<item>
<name>runtimeStyle</name><![CDATA[代表了居于全局样式表、内嵌样式和 HTML 标签属性指定的格式和样式之上的对象的格式和样式。 ]]>
</item>
<item>
<name>style</name><![CDATA[代表了给定元素所有可能的内嵌样式的当前设置。 ]]>
</item>
</root>
浙公网安备 33010602011771号