VC读取XML文档的方法

TiXmlDocument 解析 C++ vc xml元素文本修改 TiXmlDocument 解析 C++ vc  xml元素文本修改 金山界面库读取指定配置项 xml配置: 阅读详情
 

http://hi.baidu.com/nerdwa/blog/item/a8a8454a80f5c51cb2de05a6.html

摘 要:XML文档是近年来比较流行的结构化文档形式,其主要用途不只适用于开发网页,而且在其他场合也有很广泛的应用。本文主要介绍用VC++开发应用程序时对XML文档的解析。

  一、 XML 简介
  XML(Xtensible Markup Language,即扩展标记语言)的发展起源于1996年。当时,出版界巨头和Web业内人士经过共同讨论,提出了创建SGML(Standard Generalized Markup Language,即标准通用标识语言)子集(HML)的建议。该子集专用于Web,具有可扩展(或可扩充)性,并且能利用结构化标记语言的所有高级功能,但摒弃了SGML的复杂性。XML规范的第一份草稿于1996年11月发布后不久,1997年1月首个XML解析器就面世了。随后,便出现了XML的应用以及新的规范和解析器。
  HTML(Hypertext Markup Language)语言是大家所熟悉的开发网页的一种标记语言,但它不是一种编程语言,它的主要标记是针对文档内容本身结构的描述,因机器本身是不能够解析它的内容的。XML语言是SGML语言的子集,它保留了SGML主要的使用功能,同时大大减小了SGML的复杂性。它不仅能表示文档的内容,而且可以表示文档的结构,这样在能够被人类理解的同时,也能够被机器所理解。虽然HTML是SGML的一个应用,XML是SGML的一个子集,但是XML绝不是在HTML上添加某些元素而形成的,它们之间是有很大区别的。最大的区别就是XML允许使用者为某种特殊目的而定义自已的元素。除此之外,另一个最主要的区别就是XML致力解决的问题,正是在使用HTML时所遇到的一些特殊问题。
  XML要求遵循一定的严格标准,其分析程序比HTML浏览器对语法和结构的要求更加严格。XML文档每次分析的结果都一致,而HTML在不同的浏览器中可能会作出不同的分析和显示。同时,XML标准是对数据的处理应用,而不只是针对Web页的,它还可涉及到数据库电子商务系统,以及任何显示系统的高级应用。开发者可根据特定的工业需求,利用XML创建自定义的数据结构。这些数据结构和数据库可以在许多设备上查看,而不需要使用自定义的接口在不同的显示设备上查看相同的数据。
  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上已有的简单链接。

  二、文档对象模型(DOM)
  DOM是Document Object Model(文档对象模型)的简称,是对Web文档进行应用开发、编程的应用程序接口(API)。作为W3C公布的一种跨平台、与语言无关的接口规范,DOM提供了在不同环境和应用中的标准程序接口,可以用任何语言实现。
  DOM采用对象模型和一系列的接口来描述XML文档的内容和结构,即利用对象把文档模型化。这种对象模型实现的基本功能包括:
  ● 描述文档表示和操作的接口;
  ● 接口的行为和属性;
  ● 接口之间的关系以及互操作。
  DOM可对结构化的XML文档进行解析,文档中的指令、元素、实体、属性等所有内容个体都用对象模型表示,整个文档被看成是一个有结构的信息树,而不是简单的文本流,生成的对象模型就是树的节点,对象同时包含了方法和属性。因此,对文档的所有操作都是在对象树上的进行。在DOM中,树中的一切都是对象,不管是根节点还是实体的属性。
  在DOM中主要有以下三个对象:
  ● XML文档对象 XML文档既是一种对象,同时又代表整个XML文档。它由根元素和子元素组成。
  ● XML节点对象 XML节点对象代表的是XML文档内部的节点,如元素、注释、名字空间等。
  ● XML节点列表 XML文档模块列表代表了节点的集合。
  利用DOM,开发人员可以动态地创建XML文档,遍历结构,添加、修改、删除内容等。其面向对象的特性,使人们在处理XML解析相关的事务时节省大量的精力,是一种符合代码重用思想的强有力编程工具。

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

  四、程序实现
    1、XML文档的例子:
 <?xml version="1.0" ?>
 <xmlDoc>
  <天气>睛</天气>
  <温度>
   <早上>18</早上>
   <中午>32</中午>
   <晚上>16</晚上>
  </温度>
 </xmlDoc>
    整个文档便是一个文档对象DOMDoccument,
    DOMDoccument下的NodeList有两个,像天气,早上,晚上等等就是Node
    2、准备活动
    #import<msxml3.dll>或#import<msxml14.dll> 注意:不要用#import<msxml.dll>,因为解析时用到的许多方法在msxml 2.0以前版本中是没有的。
    3、初始化COM接口
    ::CoInitialize(NULL);
    4、正式编码
    注意:
    所有代码均要放在COM接口初始化后的{}中,要不会有智能指针的错误。
    1)、定义
    MSXML2::IXMLDOMDocumentPtr DocPtr;  //DOMDocument
    MSXML2::IXMLDOMNodePtr NodePtr;  //IXMLDOMNode
    MSXML2::IXMLDOMNodeListPtr Listptr;  //IXMLDOMNodeList
    2)、打开文档
    HRESULT hr = S_OK;
    hr = DocPtr.CreateInstance(__uuidof(MSXML2::DOMDocument40)); //初始化环境
    if( !SUCCEEDED(hr))
    {

 return;
    }

    DocPtr->preserveWhiteSpace = VARIANT_FALSE;   //打开文档
    DocPtr->validateOnParse = VARIANT_FALSE;
    VARIANT_BOOL vbSuccessful = VARIANT_FALSE; 
    vbSuccessful = DocPtr->load( COleVariant((LPCSTR)strXmlFilePath));
    if(vbSuccessful == VARIANT_FALSE)
    {
 return;
    }
    3)、使用所提供的方法处理文档
    所用方法读者可以自己去试,功能可以通过名字开知道,参数和返回值函数由定义可以知道,用户可以根据自己需要去自己使用。
    4)、以下是我读过一个文档的代码,希望会对使用者有所帮助
 CString strXmlFilePath = "E:\\XML20060826\\XML20060826\\sj.xml"; //文件名
 int k = 0;
 ::CoInitialize(NULL);
 {
  MSXML2::IXMLDOMNodeListPtr ListPtr0; //根层  xml + 站名站号表
  MSXML2::IXMLDOMNodeListPtr ListPtr1; //第一层 交路数 + 交路数据...
  MSXML2::IXMLDOMNodeListPtr ListPtr2; //第二层 交路号 + 车站数据...
  MSXML2::IXMLDOMNodeListPtr Listptr3; //第三层 车站信息

  MSXML2::IXMLDOMDocumentPtr DocPtr;  //主文档 从此入手

  MSXML2::IXMLDOMNodePtr NodePtrJL;   //存交路号
  MSXML2::IXMLDOMNodePtr NodePtrCZ;   //车站数据
  
  HRESULT hr = S_OK;
  hr = DocPtr.CreateInstance(__uuidof(MSXML2::DOMDocument40)); //初始化环境

  if( !SUCCEEDED(hr))
  {
//    ::AfxMessageBox("S");
   return;
   }

  DocPtr->preserveWhiteSpace = VARIANT_FALSE;   //打开文档
  DocPtr->validateOnParse = VARIANT_FALSE;
  VARIANT_BOOL vbSuccessful = VARIANT_FALSE; 
  vbSuccessful = DocPtr->load( COleVariant((LPCSTR)strXmlFilePath));
  if(vbSuccessful == VARIANT_FALSE)
  {
   return;
  }

  ListPtr0 = DocPtr->GetchildNodes();  //入根层
  ListPtr1 = ListPtr0->Getitem(1)->GetchildNodes(); //进入站名站号表结点下

  for(long i = 1; i < ListPtr1->Getlength(); i++)
  {
   ListPtr2 = ListPtr1->Getitem(i)->GetchildNodes(); //进入交路数据结点下
   ListPtr2->Getitem(0)->GetfirstChild()->Gettext(); //得交路号
   long m = ListPtr2->Getlength();
   for(long j = 1; j < ListPtr2->Getlength(); j++)
   {
    Listptr3 = ListPtr2->Getitem(j)->GetchildNodes(); //车站数据结点下
    for(long k = 0; k < Listptr3->Getlength(); k++)
    {
     try
     { 
      Listptr3->Getitem(k)->GetfirstChild()->Gettext();
      //车站号,站名,Up_in ,Up_out, Down_in,Down_out 
      
     }
     catch(_com_error &Err)//
     {      
//      ::AfxMessageBox(Err.ErrorMessage());
      continue;
     }
    }
   }
  }
 }
}
  五、结束语
  因为XML文档有着比HTML更严格的语法要求,所以使用和编写一个XML解析器要比编写一个HTML解析器要容易得多。同时因为XML文档不仅可以标记文档的显示属性,更重要的是它标记了文档的结构和包含信息的特征,所以我们可以方便地通过XML解析器来获取特定节点的信息并加以显示或修改,方便了用户对XML文档的操作和维护。同时我们需要注意的是,XML是一种开放的结构体系,并不依赖于任何一家公司,所以开发基于XML的应用必然会得到绝大多数软件开发平台的支持。

VC 6.0中读取XML文件 搞了一天 总算在VC 6.0中可以读取XML文件, 哎呀就是麻烦啊  我的天   搞了一整天头都大了在百度上参考了 许多VC代码 但是不管我怎么调试都没成功 比如哦 http://hi.baidu.com/walfer/blog/item/0a548a44a113e24c500ffe37.html    就是编译不过去(自己做了修改,因为自己机子上没有atlstr.h头文件,而且也不想在此控制 阅读详情

相关推荐

c语言读取word文件内容,c 读取word c 读取word文档

c++如何读取word基本步骤(1)创建)一个 MFC 的程序工程。注意:在VC中对WORD进行操作需要在MFC AppWizard - Step 2 of4中的Automaiton选项上打上勾。(2)Ctrl+W 执行 ClassWizard(本文按照 VC6 操作,示例程序是在VC6 下编写测试的)。(3)Add Class...\From a type Library... 在 Office...

weixin_42297727的博客 3984

VC++中利用MSXML解析XML文档

文章标题:VC++中利用MSXML解析XML文档原 作 者:侯 小 云原 出 处:不详发 布 者:loose_went发布类型:转载发布日期:2004-04-23今日浏览:11总 浏 览:2140  摘 要:XML文档是近年来比较流行的结构化文档形式,其主要用途不只适用于开发网页,而且在其他场合也有很广泛的应用。本文主要介绍用VC++开发应用程序时对XML文档的解析

小坏的专栏 1410

利用VC++与MSXML解析XML文档

利用VC++与MSXML解析XML文档--是vc写的实例

VC使用MSXML解析XML文档,例子代码

现在XML文档应用的方面特别的多.我把以前写过的一个例子帖出来,以备以后使用.第一部分:DOM解析:      概述:DOM解析将会把一个完整的XML文档读进来,生成一个结构树。这样会要把XML文档全部都加载到内在中。所以解析起来的速度会要慢一些。    1、如何加载xml文件:         //创建DOM,加载XML文档         MSXML::IXMLDOMDocumentPtr p

阿彪的Blog 3270

从零到一:手把手教你用C#开发AGV调度系统(附避坑指南)

本文详细介绍了如何使用C#开发高效的AGV调度系统,涵盖从环境搭建到核心算法实现的完整流程。重点解析了动态路径规划、多机协同等关键技术,并提供了实用的避坑指南和性能优化建议,帮助开发者快速构建工业级车辆控制调度系统。

blockchain9miner的博客 741

PPPoE上网配置不求人:华为路由器命令行操作指南(2023最新版)

本文提供2023年最新的华为路由器PPPoE上网配置命令行操作指南。通过详细的步骤讲解,从连接设备、创建拨号接口、绑定PPPoE客户端到配置内网与NAT,手把手教你完成配置,并附有验证排错方法,助你轻松实现稳定上网。

s4t5u6v的博客 679

VC++读写XML文件

1、安装MSXML 4.0 SP2。在VC6中建立一个基于Dialog的工程。如图: 在界面上放置3个编辑框、1个按钮控件。其中属性设置如下。 编辑框: ID Category Variable Type Variable Name IDC_ID Value CString m_strId IDC_AUTHOR Value

fengzhishang2019的专栏 9445

通信原理与MATLAB(八):2PSK的调制解调

通信原理和MATLAB

菜yuan~的博客 3万+

转载:VC DOM 操作XML

<br /><br />操作XML有两种方法:一种是DOM 另一种是ASX 这两种的区别在于:DOM在读取XML文档时要把整个文件都放入内存,然后形成一个完整的DOM树,然后再解析.因此,DOM对于大型文件常常力不从心.而ASX则是读取一行解析一行,不必把所有内容都放入内存.因此适合大型文件的读取.<br /> <br />这不,最近自己也遇到这方面的问题.硬着头皮把别人的代码阅读了一遍,基本掌握了创建 获取XML文档的流程.现介绍如下:<br /> <br />1.在你的APP类里面的InitInstan

namtaerg的专栏 1197

Unity——Scroll View 滑动居中、居中的放大、其他的缩小(支持横竖Scroll View)

一、效果 二、上代码,两种方式。 (第一种是在Update中用插值完成的,如果不想再项目中看到Update,下面的另一种改了一段用DoTween实现的,需要导入一下DoTween) using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using Unit...

SiReSo 7659

钉钉多维表格开发

从0到1完成钉钉多维表格开发SDK对接与实践案例。

沉修所长,勇逐新机;安而不怠,静而思变 3599

读取xml 文件

vc对取xml: 用到 #include   #import MSXML2::IXMLDOMDocumentPtr pDoc;    //创建文档对象  MSXML2::IXMLDOMNodePtr  pNode;    //创建节点对象  MSXML2::IXMLDOMNodeListPtr pNodeList;  //创建节点列表对象 封装的示例代码     C#读取x

Fly_Sky 513

CelebA-HQ数据集下载【详细明了版】分辨率包括【64,128,256,512,1024】

CelebA-HQ 是在ICLR2018上,nVidia发表了一篇名为Progressive Growing of GANs for Improved Quality, Stability, and Variation的论文,文中通过训练高分辨率GAN生成了一个新的人脸数据集CelebA-HQ.CelebA是港科大汤晓鸥组收集的人脸数据集(总共200k图片),包括了人脸特征点(landmark),人脸属性(attribute)等信息,详细介绍参考链接[1]和[2]

zik的博客 1万+

VC解析XML--CMarkup

今天需要从后台给前台发xml格式的信息,查了半天终于有解决办法官网示例文件,取出里面的Markup.cpp和Markup.h,导入你的工程里面,CMarkup类就可以用了地址 http://www.firstobject.com/dn_markup.htm  下载最新的 不然vs2008 用不了以下是复制别人的: (三) 创建一个XML文档。CMarkup xml;xml.

bearxiongying的专栏 1051

由异常的测试眼图引发的深入思考

信号测试中出现“双眼皮”的眼图测试效果,可能的导致因素总结如下:PCB通道阻抗设计不匹配,负载端出现严重反射;发射端采用了不当的信号预处理;接收器均衡处理不当;通道串扰严重... 基于以上的假设,本文就逐一分析下这些因素到底是如何对正常的信号眼图造成影响的。

一只豌豆象的博客 3060

Ubuntu22.04安装ros(一键搞定)

然后发现可以一键安装,话不多说,直接终端输入如下指令。回车之后系统会自动安装ros。

m0_47313541的博客 7413

VC6 使用msxml 操作xml 文档

在VC6 中可以通过两种方式来操作xml文档 原始方式: 引入: #import "msxml.dll" named_guids raw_interfaces_only 读取:   MSXML::IXMLDOMDocument *xmlDoc; M

sstower的专栏 2644

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Cmarkup类遍历子节点

<br /><br />C这些天用vc写程序,使用了CMarkup类文件来读写xml文件。其用法见本博客《vc中使用CMarkup类解析XML文件》。<br />当然遇到了一些问题。比如说遍历子结点。后来自己解决了,靠的是改变了xml文档。如果谁还有更好的办法,可以告诉我。<br />----------------------------Xml文件mcuinfo.xml-----------------<br /><?xml version="1.0"?><br /><mcuinfo><br /> <mc

vipfengxiao的专栏 2650

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

如何在VC环境下编写程序读取XML文件

如何在VC环境下编写程序读取XML文件?清提供源代码.谢谢. #import named_guids  //导入动态库,装了IE5就有using namespace MSXML2;     //引用命名空间,一般可以把命名空间理解成类和接口的集合,呵呵,对不对我也不知道了#include using namespace std;struct FIELD{public: CString  

tomcourageone的专栏 617

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

vc中的xml文件读取操作

读取xml1、在stdafx.h中引用如下#include "TLH/msxml4.tlh" using namespace MSXML22、在app文件中注意初始化com#if _WIN32_WINNT >= 0x0400 HRESULT hRes = CoInitializeEx(NULL, COINIT_MULTITHREADED);#else HRESULT hRes = CoInit

gishjl的专栏 3772

基于VC平台的XML解析技术的实现

XML解析技术是XML应用的核心,它涉及对XML文档的读取、解析、修改和保存等操作。以下是对XML解析技术的概述,包括其基本概念、常用方法及其在VC平台上的应用。XML基本概念数据模型:XML文档以树形结构存储数据,节点包含元素、属性和文本。标签:XML文档使用标签定义元素,标签命名遵循XML命名空间规则。命名空间:用于解决不同XML文档中可能存在的标签名冲突问题。XML解析方法DOM(Document Object Model)解析:将整个XML文档加载到内存中,形成一个树形结构,便于操作。

m0_51770140的博客 561

VC使用pugixml读取XML树形结构菜单

VC使用pugixml读取XML树形结构菜单 一、pugixml的简介 pugixml是一个简单方便的XML操作库,pugixml的官网是:http://pugixml.org/我们在上面可以下载得到最新版本的pugixml库。下载后主要使用里面的三个源文件,如下图。 将这三个源文件加人到工程里面,在要使用的地方引入头文件如下: #include "pugixml.hp...

我的博客 448

vc使用msxml解析xml文档

vc使用msxml解析xml文档,例子代码 【字体:小 大】 vc使用msxml解析xml文档,例子代码 作者:佚名 文章来源:不详 点击数: 更新时间:2007-7-1 现在XML文档应用的方面特别的多. 我把以前写过的一个例子帖出来,以备以后使用.

johns78的专栏 685

VC——MFC读取XML文件

在MFC中利用IXMLDOMDocumentPtr类来操作XML格式的文件 首先:安装msxml.msi,下载地址 http://download.youkuaiyun.com/detail/wlq5800/4421675 然后:在stdafx.h文件中,加载DLL文件 #import 宏定义一下 #define XMLDocPtr  MSXML2::IXMLDOMDocumentPtr #de

3578
上一篇: 使用make -nd调试makefile
下一篇: CMD 命令速查手册
penguinoflinux
博客等级 码龄19年 15粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值