vc++mfc怎么利用msxml2.xmlhttp.6.0解析xml文件

有没有高手在MFC中用MSXML解析XML_mfc吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:12,275贴子:
有没有高手在MFC中用MSXML解析XML收藏
有没有在MFC中用MSXML解析XML中各种节点,然后显示在界面里的例子,最好具体点的
mcgill轴承官方授权,华南总代,联网可查真伪.mfc-40原装进口假一罚万.mcgill轴承,世界知名品牌,我们郑重承诺mcgill轴承保证质量,无假冒,欢迎通过mfc-40 查询
用VC创建一个文档对象:MSXML2::IXMLDOMDocumentPtr pD HRESULT hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40)); if (! SUCCEEDED(hr)) {
MessageBox("无法创建DOMDocument对象,请检查是否安装了MSXML Parser运行库!" ); } pDoc-&load("*.xml");//读取xml文件
MSXML2::IXMLDOMElementPtr root = pDoc-&GetdocumentElement();//获得根节点在获取根节点之后,对文档中节点的操作常使用的方法见于表3.3:
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或xingziying 的BLOG
用户名:xingziying
访问量:581
注册日期:
阅读量:5863
阅读量:12276
阅读量:357427
阅读量:1054053
51CTO推荐博文
&&&&最近对XML有了些兴趣,准备稍稍涉猎一下。百度了相关的文章,试着写了一个程序,记录下来以资备忘。& & 我的开发环境:Win7 32位OS、VS2012。&&&&OK,开始动手。&&&&PS:至于相关理论之类的就让大神大仙大侠大牛们去操心吧,我么就秉承拿来主义,能用就行啦。&&&&启动Visual Studio 2012。&&&&【文件】→【新建】→【项目】&&&&650) this.width=650;" src="/wyfs02/M00/58/47/wKiom1StKxLBSKHfAAIyhRVrVOE622.jpg" title="1_新建项目.jpg" alt="wKiom1StKxLBSKHfAAIyhRVrVOE622.jpg" />& & 新建一个“MfcXmlTest”的MFC项目。【确定】&&&&& & 【下一步】&&&&& & 选中“基于对话框”,取消“使用Unicode库”。可直接【完成】&&&&PS:Unicode对中文支持不是很好。&&&&&&&&热身完成,开始进入正题。&&&&先画一个简单的程序界面。&&&&&&&&里面添加了中文,测试是否对中文支持。&&&&各控件属性:控件ID变量类型变量名称IDC_EDIT_IDCStringm_strIdIDC_EDIT_BOOKCStringm_strBookIDC_EDIT_AUTHORCStringm_strAuthorIDC_BUTTON_GENERATE生成XMLIDC_BUTTON_LOAD加载XML&&&&进入代码编写阶段。&&&&在StdAfx.h中引入动态链接库 MSXML6.DLL(C:/windows/system32/msxml6.dll)&&&&可在文件最后添加://&Win7系统自带MSXML6版本,不同OS请依照对应的版本,也可自行安装
#import&&msxml6.dll&&&&&双击“生成XML”按钮,完成如下代码://&按钮:生成XML
void&CMfcXmlTestDlg::OnBnClickedButtonGenerate()
//&TODO:&在此添加控件通知处理程序代码
UpdateData(TRUE);
MSXML2::IXMLDOMDocumentPtr&pD
//&xml文档
MSXML2::IXMLDOMElementPtr&xmlR
MSXML2::IXMLDOMElementPtr&pElement,&pElement1;
MSXML2::IXMLDOMNodePtr&pNode=NULL;
MSXML2::IXMLDOMProcessingInstructionPtr&pProInstruction&=&NULL;
//&xml声明
//&创建DOMDocument对象
HRESULT&hr&=&pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument60)); //&MSXML6版本
if&(!SUCCEEDED(hr))
MessageBox("无法创建DOMDocument对象,请检查是否安装了MS&XML&Parser&运行库!");
//&创建xml文档声明:&?xml&version="1.0"&encoding="utf-8"?&
pProInstruction&=&pDoc-&createProcessingInstruction((_bstr_t)(char*)"xml",&(_bstr_t)(char*)"version=\"1.0\"&encoding=\"utf-8\"");
pDoc-&appendChild(pProInstruction);
//&根节点的名称为:图书馆
xmlRoot&=&pDoc&-&&createElement((_bstr_t)"图书馆");
pDoc&-&&PutRefdocumentElement(xmlRoot);
/* --------&运行结果&--------
&?xml&version="1.0"&encoding="utf-8"?&
&&&Book&ID="321"&
&书名&BookName&/书名&
&作者&BookAuthor&/作者&
//&节点的名称为Book
pElement&=&pDoc&-&&createElement((_bstr_t)"Book");
//&设置属性
pElement&-&&setAttribute(&"ID"&,(&const&char&*&)m_strId);
xmlRoot&-&&appendChild(pElement);
//&添加“书名”元素
pElement1&=&pDoc&-&&createElement((_bstr_t)&"书名"&);
pElement1&-&&Puttext((_bstr_t)(&const&char&*&)m_strBook);
pElement&-&&appendChild(pElement1);
//&添加“作者”元素
pElement1&=&pDoc&-&&createElement(&"作者"&);
pElement1&-&&Puttext((&const&&&char&&&*&)m_strAuthor);
pElement&-&&appendChild(pElement1);
/* --------&运行结果&--------
&ID&123&/ID&
&书名&BookName&/书名&
&作者&BookAuthor&/作者&
//&添加“Book”节点
pNode&=&pDoc-&createNode((_variant_t)(long)NODE_ELEMENT,&(_bstr_t)(char*)"Book",&(_bstr_t)(char*)"");
xmlRoot&-&&appendChild(pNode);
//&添加“ID”元素
pElement&=&pDoc&-&&createElement((_bstr_t)&"ID"&);
pElement&-&&Puttext((_bstr_t)(&const&char&*&)m_strId);
pNode&-&&appendChild(pElement);
//&添加“书名”元素
pElement&=&pDoc&-&&createElement((_bstr_t)&"书名"&);
pElement&-&&Puttext((_bstr_t)(&const&char&*&)m_strBook);
pNode&-&&appendChild(pElement);
//&添加“作者”元素
pElement&=&pDoc&-&&createElement(&"作者"&);
pElement&-&&Puttext((&const&&&char&&&*&)m_strAuthor);
pNode&-&&appendChild(pElement);
//&保存到文件。如果不存在就建立,存在就覆盖
pDoc&-&&save("d://Book.xml");
}&&&&双击“加载XML”按钮,完成如下代码://&按钮:加载XML
void&CMfcXmlTestDlg::OnBnClickedButtonLoad()
//&TODO:&在此添加控件通知处理程序代码
/* --------&XML&内容&--------
&?xml&version="1.0"&encoding="utf-8"?&
&&&Book&ID="321"&
&书名&BookName&/书名&
&作者&BookAuthor&/作者&
//&清空控件内容
m_strId.Empty();
m_strBook.Empty();
m_strAuthor.Empty();
UpdateData(FALSE);
//&变量值―&控件显示
MSXML2::IXMLDOMDocumentPtr&pD
hr&=&pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument60));
if&(FAILED(hr))
MessageBox("无法创建DOMDocument对象,请检查是否安装了MS&XML&Parser&运行库!");
//&加载文件
pDoc&-&&load("d://Book.xml");
//&选择内容的根节点
MSXML2::IXMLDOMElementPtr&pElem&=&NULL;
pElem&=&pDoc&-&&selectSingleNode("//图书馆");
if(pElem==NULL)
//&搜索“图书馆”中“Book”的数量(本例只有一本)
int&nBookNum&=&pElem-&childNodes-&
if(&nBookNum&==&0)
//&遍历所有Book
for(int&i=0;&i&&&nBookN&i++)
MSXML2::IXMLDOMNodePtr&pBookNode&=&pElem-&childNodes-&item[i];
if(pBookNode==NULL)
//读取Book节点的“ID”属性
MSXML2::IXMLDOMNodePtr&pId&=&pBookNode-&attributes-&getNamedItem("ID");
m_strId=(LPCTSTR)pId-&
//&类型转换&_bstr_t&→&CString
//读取book节点下“书名”子节点
MSXML2::IXMLDOMNodePtr&pBook&=&pBookNode-&selectSingleNode("书名");
if(pBook==NULL)
//cout&&"Author:&Error\t";
m_strBook=(LPCTSTR)pBook-&
//读取book节点下“作者”子节点
MSXML2::IXMLDOMNodePtr&pAuthor&=&pBookNode-&selectSingleNode("作者");
if(pAuthor==NULL)
//cout&&"Author:&Error\t";
m_strAuthor=(LPCTSTR)pAuthor-&
} //&for(int&i=0;&i&&&nBookN&i++)
UpdateData(FALSE);
}&&&&到了激动人心的最终时刻啦!&&&&按下F7生成程序,如果一切顺利,再按下F5走起。&&&&运行效果如图:&&&&&&&&\(RQ)/~啦啦啦&&&&本人调试的时候也蹦出了一个异常:&&&&&&&&仔细看去,原来是MSXML的版本没有改为自己电脑的MSXML6版本。望诸位留意。PS:参考了不少网友的大作,一并表示感谢!本文出自 “” 博客,请务必保留此出处
了这篇文章
附件下载:  
类别:┆阅读(0)┆评论(0)
请输入验证码:博客访问: 27283
博文数量: 58
注册时间:
鏆傛棤浠嬬粛
ITPUB论坛APP
ITPUB论坛APP
APP发帖 享双倍积分
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Web开发
XML DOM (文档对象模型)对象提供了一个标准的方法来操作存储在XML文档中的信息,这就是DOM应用编程接口(API)函数。它是应用程序和XML文档之间的桥梁。DOM包含两个关键的抽象概念:一个是树状的层次结构,另一个是用来表示文档内容和结构的节点集合。树状层次包括了所有节点,节点本身也可以包含其他的节点。这样的好处是可以通过这个层次结构来找到并修改某一特定节点的信息。 微软的MSXML解析器读取一个XML文档,然后把它的内容解析到一个抽象的信息容器中,该信息容器被称为节点(NODES)。这些节点代表文档的结构和内容,并允许应用程序来操作文档中的信息而不需要知道XML的语义。一个文档被解析后,它的节点能够在任何时候被浏览而不需要保持一定的顺序。 对开发人员来说,最重要的编程对象是DOMDocument。 DOMDocument对象通过暴露的属性和方法来允许浏览、查询和修改XML文档的内容和结构。 本文主要介绍DOM的结构和应用,同时用VC编程语言给出了通过MSXML进行XML解析的实例。 DOMDocument对象的结构和应用 文档对象的创建 HRESULTIXMLDomDocument* pXMLDIXMLDOMNode* pXDN;//COM的初始化Hr=CoInitialize(NULL); /*得到关于IXMLDOMDocument接口的指针pXMLDOC*/hr=CoCreateInstance(CLSID_DOMDocument,NULL,CLSCTX_INPPROC_SERVER,IID_IXMLDOMDocument,(void**)&pXMLDoc); //得到关于IXMLDOMNode接口的指针pXDNhr=pXMLDoc->QueryInterface(IID_IXMLDOMNode,(void**)&pXDN);在MSXML解析器的使用过程中,我们可以使用文档中的CreateElement方法创建一个节点来装载和保存XML文件,也可以通过Load或者是 LoadXML方法从一个指定的URL来装载一个XML文档。Load(LoadXML)方法带有两个参数:第一个参数xmlSource表示需要被解析的文档,第二个参数isSuccessful表示文档装载是否成功。 文档对象的保存 Save方法是用来把文档保存到一个指定的位置。Save方法中参数destination用来表示需要被保存的对象的类型,对象可以是一个文件、一个ASP Response方法、一个XML文档对象,或者是一个能够支持持久保存(persistence)的客户对象。下面是使用Save方法的一个例子程序的部分代码: BOOL DOMDocSaveLocation(){BOOL bResult = FALSE;IXMLDOMDocument *pIXMLDOMDocument = NULL;HRESULTtry{_variant_t varString = _T(“D:sample.xml");/* 这里省略了创建一个DOMDocument对象和装载XML文档的代码*///将文档保存到D:sample.xml中去hr=pIXMLDOMDocument->save(varString); if(SUCCEEDED(hr))bResult = TRUE;}catch(...){DisplayErrorToUser();/*这里省略了释放对IXMLDOMDocument接口的引用的代码*/}return bR}设置解析标志 在解析过程中,我们需要得到和设置解析标志。利用不同的解析标志,我们可以用不同的方法来解析一个XML文档。XML标准允许解析器验证或者不验证文档,允许不验证文档的解析过程跳过对外部资源的提取,还可以设置标志来表明是否要从文档中移去多余的空格。DOMDocument对象暴露了如下几个属性,允许用户在运行的时候利用它们改变解析器的行为。 1.Async属性方法:get_Async和put_Async。 2.ValidateOnParse属性方法:get_ValidateOnParse和 put_ValidateOnParse。 3.ResolveExternals属性方法:get_ ResolveExternals和put_ ResolveExternals。 4.PreserveWhiteSpace属性方法:get_ PreserveWhiteSpace和put_ PreserveWhiteSpace。 每一个属性可以接受或者返回一个Boolean值。缺省情况下,Async、ValidateOnParse、ResolveExternals的值为TRUE,PreserveWhiteSpace的值跟 XML文档的设置有关,如果XML文档中设置了xml:space属性的话,该值为FALSE。 在文档解析过程中可以收集到以下的信息: 1.doctype(文档类型):是用来定义文档格式的DTD文件。如果XML文档没有相关的 DTD文档的话,它就返回NULL。 2.implementation(实现):表示该文档的实现,用来指出当前文档所支持的XML的版本。 3.parseError(解析错误):指出在解析过程中最后所发生的错误。 4.readyState(状态信息):表示XML文档的状态信息。readyState对于异步使用微软的XML 解析器来说重要的作用是提高了性能。当异步装载XML文档的时候,程序可能需要检查解析的状态,MSXML提供了4个状态,分别为正在状态、已经状态、正在解析和解析完成。 5.url(统一资源定位):表示正在被装载和解析的XML文档的URL的情况。如果该文档是在内存中建立的话,这个属性返回NULL值。节点的操作 在得到文档树结构以后,我们可以操作树中的每一个节点,一般通过两个方法得到树中的节点,分别为nodeFromID和getElementsByTagName。 nodeFromID包括两个参数,第一个参数idString用来表示ID值,第二个参数node返回指向和该ID相匹配的节点的接口指针。根据XML的技术规定,每一个XML文档中的ID值必须是唯一的,而且一个元素(element)只能和一个ID 相关联。 getElementsByTagName方法有两个参数,第一个参数 tagName表示需要查找的元素(Element)名称,如果tagName为“*”则返回文档中所有的元素。第二个参数为resultList,它实际是指向接口IXMLDOMNodeList的指针,用来返回和 tagName(标签名字)相关的所有节点的集合。 下面是相关例子程序的部分代码: IXMLDOMDocument *pIXMLDOMDocument = NULL; wstring strFindText (_T(“author"));IXMLDOMNodeList *pIDOMNodeList = NULL;IXMLDOMNode *pIDOMNode = NULL;BSTR bstrItemTHRESULTtry{/*此处省略创建一个DOMDocument文档对象并装载具体文档的代码*//*下面的代码用来得到一个和标签名称author相关的所有节点的集合*///是否正确地得到了指向IDOMNodeList的指针hr=pIXMLDOMDocument->getElementsByTagName((TCHAR*)strFindText.data(), &pIDOMNodeList);SUCCEEDED(hr) ? 0 : //得到所包含的节点的个数 hr = pIDOMNodeList->get_length(&value); if(SUCCEEDED(hr)){pIDOMNodeList->reset();for(int ii = 0; ii < ii++){//得到具体的一个节点pIDOMNodeList->get_item(ii,&pIDOMNode); if(pIDOMNode ){//得到该节点相关的文本信息pIDOMNode->get_text(&bstrItemText);::MessageBox(NULL, bstrItemText,strFindText.data(), MB_OK);pIDOMNode->Release();pIDOMNode = NULL;}}}pIDOMNodeList->Release();pIDOMNodeList = NULL;}catch(...){if(pIDOMNodeList)pIDOMNodeList->Release();if(pIDOMNode)pIDOMNode->Release();DisplayErrorToUser();}可以通过方法CreateNode来创建一个新的节点。 CreateNode包括4个参数,第一个参数type表示要创建的节点的类型,第二个参数name表示新节点的nodeName的值,第三个参数namespaceURI表示和该节点相关的名字空间,第四个参数node表示新创建的节点。可以通过使用已经提供的类型(type)、名称(name)和名字空间(nodeName)来创建一个新节点。 当一个节点被创建的时候,它实际上是在一个名字空间范围(如果已经提供了名字空间的话)内被创建的。如果没有提供名字空间的话,它实际上是在文档的名字空间范围内被创建的。解析XML 为了说明如何在VC中使用XML DOM模型,这里我们介绍一个简单的Console Application实例程序。下面是主要的程序代码,用来在一个XML 文档中定位一个特殊的节点,并插入一个新的子节点。 #include
/*下面的.h文件是在安装了最新的XML Parser以后所包含的.h文件*/#include “C:Program FilesMicrosoftXML Parser SDKincmsxml2.h"#include void main(){// 初始化COM接口CoInitialize(NULL);/*在程序中,假定装载的XML文件名称为xmldata.xml,缺省情况下它和可执行文件在同一个目录中。该文件的内容如下: Hello, World!程序将寻找名为“xmlnode”的节点,插入一个新的名称为“xmlchildnode”的节点,然后它再去寻找一个名为“xmltext”的节点,然后提取包含在该节点中的文本并显示它,最后它把新的改变过的XML文档保存在名称为“updatexml.xml”的文档中。*/try {// 通过智能指针创建一个解析器的实例CComPtrspXMLDOM;HRESULT hr =spXMLDOM.CoCreateInstance(-uuidof(DOMDocument));if ( FAILED(hr) ) throw “不能创建XML Parser对象";if ( spXMLDOM.p == NULL ) throw “不能创建XML Parser对象";// 创建成功,开始装载XML文档VARIANT_BOOL bSuccess =hr =spXMLDOM->load(CComVariant(L“xmldata.xml"),&bSuccess);if ( FAILED(hr) ) throw “不能够在解析器中装载XML文档";if ( !bSuccess ) throw “不能够在解析器中装载XML文档";// 检查并搜索“xmldata/xmlnode"CComBSTR bstrSS(L“xmldata/xmlnode");CComPtrspXMLN/*用接口IXMLDOMDocument的selectSingleNode方法定位该节点。*/hr =spXMLDOM->selectSingleNode(bstrSS,&spXMLNode);if ( FAILED(hr) ) throw “不能在XML节点中定位‘xmlnode’";if ( spXMLNode.p == NULL ) throw“不能在XML节点中定位‘xmlnode' ";/*DOM对象“spXMLNode”现在包含了XML节点,所以我们可以在它下面创建一个子节点。*/CComPtr
spXMLChildN/*用接口IXMLDOMDocument的方法createNode方法创建一个新节点。*/hr = spXMLDOM->createNode(CComVariant(NODE_ELEMENT),CComBSTR(“xmlchildnode"),NULL,&spXMLChildNode);if ( FAILED(hr) ) throw “不能创建‘xmlchildnode' 节点";if ( spXMLChildNode.p == NULL ) throw “不能创建‘xmlchildnode' 节点";//添加新节点到spXMLNode节点下CComPtr
spInsertedNhr =spXMLNode->appendChild(spXMLChildNode,&spInsertedNode);if ( FAILED(hr) ) throw “不能创建‘xmlchildnode' 节点";if ( spInsertedNode.p == NULL ) throw “不能移动‘xmlchildnode' 节点";//设置新节点属性CComQIPtr
spXMLChildEspXMLChildElement = spInsertedNif ( spXMLChildElement.p == NULL )throw “不能在XML元素接口中查询到‘xmlchildnode' ";hr =spXMLChildElement->setAttribute(CComBSTR(L“xml"),CComVariant(L“fun"));if ( FAILED(hr) ) throw“不能插入新的属性"; /*下面的程序段用来寻找一个节点并显示该节点的相关信息。*/// 查找“xmldata/xmltext"节点// 释放先前的节点spXMLNode = NULL; bstrSS = L“xmldata/xmltext";hr =spXMLDOM->selectSingleNode(bstrSS,&spXMLNode);if ( FAILED(hr) ) throw “不能定位‘xmltext'节点";if ( spXMLNode.p == NULL ) throw“不能定位‘xmltext'节点";// 得到该节点包含的文本并显示它CComVariant varValue(VT_EMPTY);hr =spXMLNode->get_nodeTypedValue(&varValue);if ( FAILED(hr) ) throw “不能提取‘xmltext'文本";if ( varValue.vt == VT_BSTR ) {/*显示结果。注意这里要把字符串从形式BSTR转化为ANSI。*/USES_CONVERSION;LPTSTR lpstrMsg = W2T(varValue.bstrVal);std::cout<< lpstrMsg << std::} // ifelse {// 如果出现错误throw “不能提取‘xmltext'文本";} // else//将修改过的XML文档按指定的文档名保存hr = spXMLDOM->save(CComVariant(“updatedxml.xml"));if ( FAILED(hr) ) throw “不能保存修改过的XML文档";std::cout << “处理完成..." << std::endl << std::} // trycatch(char* lpstrErr) {// 出现错误std::cout << lpstrErr << std::endl << std::} // catchcatch(...) {// 未知错误std::cout << “未知错误..." << std::endl << std::} // catch// 结束对COM的使用CoUninitialize();}因为XML文档有比HTML更加严格的语法要求,所以使用和编写一个XML解析器比编写一个HTML的解析器要容易。同时因为XML文档不仅标记文档的显示属性,更重要的是它标记了文档的结构和包含信息的特征,所以我们可以方便地通过XML解析器来获取特定节点的信息并加以显示或修改。[@more@]
阅读(671) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。利用MSXML解析XML文本(VC)
  当前Web上流行的剧本语言是以HTML为主的语言结构,HTML是一种标记语言,而不是一种编程语言,主要的标记是针对显示,而不是针对文档内容本身结构的描述的。也就是说,机器本身是不能够解析它的内容的,所以就出现了XML语言。XML (eXtensible Markup Language)语言是SGML语言的子集,它保留了SGML主要的使用功能,同时大大缩减了SGML的复杂性。XML语言系统建立的目的就是使它不仅能够表示文档的内容,而且可以表示文档的结构,这样在同时能够被人类理解的同时,也能够被机器所理解。XML要求遵循一定的严格的标准。XML分析程序比HTML浏览器更加要挑剔语法和结构,XML要求正在创建的网页正确的使用语法和结构,而不是象HTML一样,通过浏览器推测文档中应该是什么东西来实现HTML的显示,XML使得分析程序不论在性能还是稳定性方面都更容易实现。XML文档每次的分析结果都是一致的,不象HTML,不同的浏览器可能对同一个HTML作出不同的分析和显示。
  同时因为分析程序不需要花时间重建不完整的文档,所以它们能比同类HTML能更有效地执行其任务。它们能全力以赴地根据已经包含在文档中的那个树结构建造出相应的树来,而不用在信息流中的混合结构的基础上进行显示。XML标准是对数据的处理应用,而不是只针对Web网页的。任何类型的应用都可以在分析程序的上面进行建造,浏览器只是XML的一个小的组成部分。当然,浏览仍旧极其重要,因为它为XML工作人员提供用于阅读信息的友好工具。但对更大的项目来说它就不过是一个显示窗口。因为XML具有严格的语法结构,所以我们甚至可以用XML来定义一个应用层的通讯协议,比如互联网开放贸易协议(Internet Open Trading Protocol)就是用XML来定义的。从某种意义上说,以前我们用BNF范式定义的一些协议和格式从原则上说都可以用XML来定义。实际上,如果我们有足够的耐心,我们完全可以用XML来定义一个C++语言的规范。
  当然,XML允许大量HTML样式的形式自由的开发,但是它对规则的要求更加严格。XML主要有三个要素:DTD(Document Type Declaration&&文档类型声明)或XML Schema(XML大纲)、XSL(eXtensible Stylesheet Language&&可扩展样式语言)和XLink(eXtensible Link Language&&可扩展链接语言)。DTD和XML大纲规定了XML文件的逻辑结构,定义了XML文件中的元素、元素的属性以及元素和元素的属性之间的关系;Namespace(名域)实现统一的XML文档数据表示以及数据的相互集成;XSL是用于规定XML文档呈现样式的语言,它使得数据与其表现形式相互独立,比如XSL能使Web浏览器改变文档的表示法,例如数据的显示顺序的变化,不需要再与服务器进行通讯。通过改变样式表,同一个文档可以显示得更大,或者经过折叠只显示外面得一层,或者可以变为打印得格式。而XLink将进一步扩展目前Web上已有的简单链接。
 二、实现XML解析的说明
  当然,从理论上说,根据XML的格式定义,我们可以自己编写一个XML的语法分析器,但是实际上微软已经给我们提供了一个XML语法解析器,如果你安装了IE5.0以上版本的话,实际上你就已经安装了XML语法解析器。可以从微软站点()下载最新的MSXML的SDK和Parser文件。它是一个叫做MSXML.DLL的动态链接库,最新版本为msxml3,实际上它是一个COM对象库,里面封装了所有进行XML解析所需要的所有必要的对象。因为COM是一种以二进制格式出现的和语言无关的可重用对象。所以你可以用任何语言(比如VB,VC,DELPHI,C++ Builder甚至是剧本语言等等)对它进行调用,在你的应用中实现对XML文档的解析。下面的关于XML文档对象模型的介绍是基于微软最新的msxml3为基础进行的。
  三、XML文档对象(XML DOM)模型分析
  XML DOM对象提供了一个标准的方法来操作存储在XML文档中的信息,DOM应用编程接口(API)用来作为应用程序和XML文档之间的桥梁。
  DOM可以认为是一个标准的结构体系用来连接文档和应用程序(也可以是剧本语言)。MSXML解析器允许你装载和创建一个文档,收集文档的错误信息,得到和操作文档中的所有的信息和结构,并把文档保存在一个XML文件中。DOM提供给用户一个接口来装载、到达和操作并序列化XML文档。DOM提供了对存储在内存中的XML文档的一个完全的表示,提供了可以随机访问整个文档的方法。DOM允许应用程序根据MSXML解析器提供的逻辑结构来操作XML文档中的信息。利用MSXML所提供的接口来操作XML。
  实际上MSXML解析器根据XML文档生成一个DOM树结构,它能够读XML文档并根据XML文档内容创建一个节点的逻辑结构,文档本身被认为是一个包含了所有其他节点的节点。
  DOM使用户能够把文档看成是一个有结构的信息树,而不是简单的文本流。这样应用程序或者是剧本即使不知道XML的语义细节也能够方便的操作该结构。DOM包含两个关键的抽象:一个树状的层次、另一个是用来表示文档内容和结构的节点集合。树状层次包括了所有这些节点,节点本身也可以包含其他的节点。这样的好处是对于开发人员来说,他可以通过这个层次结构来找到并修改相应的某一个节点的信息。DOM把节点看成是一个通常的对象,这样就有可能创建一个剧本来装载一个文档,然后遍历所有的节点,显示感兴趣的节点的信息。注意节点可以有很多中具体的类型,比如元素、属性和文本都可以认为是一个节点。
  微软的MSXML解析器读一个XML文档,然后把它的内容解析到一个抽象的信息容器中称为节点(NODES)。这些节点代表文档的结构和内容,并允许应用程序来读和操作文档中的信息而不需要显示的知道XML的语义。在一个文档被解析以后,它的节点能够在任何时候被浏览而不需要保持一定的顺序。
  对开发人员来说,最重要的编程对象是DOMDocument。DOMDocument对象通过暴露属性和方法来允许你浏览,查询和修改XML文档的内容和结构,每一个接下来的对象暴露自己的属性和方法,这样你就能够收集关于对象实例的信息,操作对象的值和结构,并导航到树的其他对象上去。[1]&&&&&&
【声明】:黑吧安全网()登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱,我们会在最短的时间内进行处理。
上一篇:【】【】}

我要回帖

更多关于 vc xml msxml6 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信