Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Visual C++ > XML语法分析器-VC中使用--转载
【标  题】:XML语法分析器-VC中使用--转载
【关键字】:XML,-VC,--
【来  源】:http://www.cnitblog.com/liaoqingshan/archive/2006/09/15/16870.html

XML语法分析器-VC中使用--转载

Your Ad Here ?从理论上说,根据XML的格式定义,我们可以自己编写一个XML的语法分析器,但实际上微软已经给我们提供了一个XML语法解析器,即一个叫做MSXML.DLL的动态链接库,实际上它是一个COM(Component?Object?Model)对象库,里面封装了进行XML解析时所需要的所有对象。因为COM是一种以二进制格式出现的和语言无关的可重用对象,所以你可以用任何语言(比如VB,VC,DELPHI,C++?Builder甚至是脚本语言等等)对它进行调用,在你的应用中实现对XML文档的解析。
  MSXML.DLL所包括的主要COM接口有:
  1.?IXMLDOMDocument(Document接口)
DOMDocument对象是XML?DOM的基础,你可以利用它所暴露的属性和方法来浏览、查询和修改XML文档的内容和结构。DOMDocument表示了树的顶层节点,它实现了DOM文档的所有的基本方法,并且提供了额外的成员函数来支持XSL和XSLT。它创建了一个文档对象,所有其他的对象都可以从这个文档对象中得到和创建。
  2.?IXMLDOMNode(Node接口)
  IXMLDOMNode是文档对象模型(DOM)中的基本对象,元素、属性、注释、过程指令和其他的文档组件都可以认为是IXMLDOMNode。事实上,DOMDocument对象本身也是一个IXMLDOMNode对象。
?  3.?IXMLDOMNodeList
  IXMLDOMNodeList实际上是一个节点(Node)对象的集合,节点的增加、删除和变化都可以在集合中立刻反映出来,可以通过"for.循环?"结构来遍历所有的节点。
  4.?IXMLDOMParseError
  IXMLDOMParseError接口用来返回在解析过程中所出现的详细的信息,包括错误号、行号、字符位置和文本描述。
  在具体应用时可以用DOMDocument的Load方法来装载XML文档,用IXMLDOMNode?的selectNodes(查询的结果有多个,得到存放搜索结果的链表)或selectSingleNode(查询的结果有一个,在有多个的情况下返回找到的第一个节点)方法进行查询,用createNode和appendChild方法来创建节点和追加节点,用IXMLDOMElement的setAttribute和getAttribute方法来设置和获得节点的属性。
四、编程举例

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);
?
}

JDOM操作XML文件--转载:【上一篇】
这段代码被太多的人转载了:【下一篇】
【相关文章】
  • JDOM操作XML文件--转载
  • windows核心编程--线程池
  • windows核心编程--纤程
  • 关于原始输入--XP中的新技术(原创,转载请注明出处)
  • 汇编语言的准备知识--给初次接触汇编者[转载]
  • XMLRPC简单Test(server)
  • Qt--简单的例子
  • RHCA---Red Hat终极认证最新消息!
  • 读林锐《软件工程思想》------讲述软件开发和做程序员的道理
  • 读林锐《软件工程思想》------讲述软件开发和做程序员的道理--语录
  • 【随机文章】
  • linux多媒体
  • 用socket发送xml文档,把生成的xml文档转化成字符流输出
  • 背板带宽和交换容量
  • JSP入门知识总结
  • 微软发JPEG漏洞补丁,相关病毒正在上路
  • 一个asp用的双列或是偶数列显示的例子
  • MySQL-python-1.2.0 安装
  • HttpURLConnection使用中需要注意的地方
  • asin ( ) 【C语言库函数源代码】
  • QQ会员有福了 免费答题赢黄钻
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.