简单实用的Xml解析类

今天有点郁闷,不想干活。整理代码的时候,看到了这个好久之前写的代码,于是想整理 出来供大家拍砖。XML的解析对于.Net平台那真是太简单不过了,感谢微软。但对于C++语言 的XML解析就没那么容易了。有一个开源的XML4C是IBM的,功能强大,但代码大的有几M,而且 对于GB2312的支持有问题,据说能解决,但可能是我天生愚钝,当初我花了2周时间也没搞定 ,最后放弃,自己写了一个。咦?还能跑起来,也能跨平台:)。 写这个XML解析类,以功能 最简单,最实用,最常用的功能为原则,因为只能解析,查找,没有XML文档生成器。如果需 要生成XMl文档,还是自己拼凑字串吧。

此解析器的接口完全模仿XML4C的对外接 口,使用也很类似,稍有不同,对复杂部分进行了封装。总共分3个类: CPacket、 DOMElement、DOMDocument。 DOMElement为节点类,主有有tag、level、 parent、childlist 等几个属性。DOMElement类主要是对XML文档的解析,生成,对整个XML文档 生成DOM树。 CPacket主要是对XML文档的封装,提供对外的接口。

下面简单示例一下使用方法:

1、创建DOM树,得到XML对象:

解析分两种,第一种是对xml string 字串的解 析,另一种是对文件的解析。对应函数分别为:

CPacket::BuiltTree(const char* pBuf,int nBufSize);
  CPacket::BuiltTree(MLPCSTR pXmlPath);

使 用示例:

CPacket inPacket;
  DOMElement* TransNode = NULL;
  DOMElement* AccNode = NULL;
  inPacket.BuiltTree(strXml.c_str (),strXml.size()); //生成DOM树结构.
  inPacket.BuiltTree ("c:\\1.xml"); //生成DOM树结构.

2、对原有DOM 树添加子结点:

可以通过CPacket::CreateElement(char szNodeName[]) 来创建字节点, 示例:

(1)CPacket::CreateElement("/Root/Cust/Tel")

会在 根节点下创建Root/Cust/Tel 如果存在Root和Cust节点了则不在创建,否则会创建3个节 点,Root,Cust,Tel 并且具有父子关系。

(2)CPacket::CreateElement ("Root/Cust/Tel")

会在当前节点下创建Root,Cust,Tel,至于当前节点 ,可以通过SetCurrentElement 来设置,默认根节点是当前节点.

3、节点的查找,节点的查 找,有4个函数可以用:

CPacket::SearchElement(char * szNodeName); //搜索普通节点,分绝对路径(路径以/开头),相对路径
  CPacket::SearchElement(char * szNodeName,char * szProper,char * szId); //指定属 性
  CPacket::SearchNextElement(bool pMoveNext = TRUE); //当前节 点的下一个兄弟节点,参数决定向下移动当前节点,这个函数速度最快
  CPacket::SearchNextElement(char *szNodeName,char *szProper = NULL,char *szId = NULL); //下一个节点

时间: 2024-11-01 05:51:31

简单实用的Xml解析类的相关文章

xml 解析类_XML/RSS

xml 解析类 <?php ob_start(); /*                                                              * Copyright (c) 2003 NightKids  <weidewang@magus-soft.com>                      * All rights reserved.                                                      

PHP XML解析类

Java代码   <?php    /*     +----------------------------------------------------------------------+     | SofeeFramework for PHP 4                                             |     +----------------------------------------------------------------------

android 简单实用的Log打印类封装,助你快速定位问题

相信众多android开发者在开发程序的过程中会经常用到Log打印信息 以方便了解当前程序的运行状况以及在出现BUG的时候能够快速定位问题 大多数童鞋会使用官方的打印log的方法,设置TAG,然后在Eclipse里面设置过滤标签,切换来回的看Log,但这样却效率很低: 下面分享一个Log打印信息的封装类,主要提供以下功能:   1.使用一个标签来标记当前的AP(避免设置过多的TAG来过滤显示不同Java文件下的Log) 2.显示当前的线程ID,用于辨别主线程还是子线程 3.显示当前的Java文件

Android编程实现XML解析与保存的三种方法详解

本文实例讲述了Android编程实现XML解析与保存的三种方法.分享给大家供大家参考,具体如下: 简介 在Android开发中,关于XML解析有三种方式,分别是: 1. SAX 基于事件的解析器,解析速度快,占用内存少.非常适合在Android移动设备中使用. 2. DOM 在内存中以树形结构存放,因此检索和更新效率会更高.但是对于特别大的文档,解析和加载整个文档将会很耗资源 3. PULL 基于事件的解析器,不同于SAX是,PULL是主动请求下一个事件,所以在可控上PULL要比SAX实用.An

根据XML配置规则导入Excel数据(五)ExcelReader XLS解析类

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dba10g.blog.51cto.com/764602/756538   ExcelReader.java     package com.ivfly.xlsbean;  import java.io.FileInputStream; import java.io.IOException; import java.lang.reflect.InvocationTargetExc

c# 解析xml文件-C#解析xml文件的解析类

问题描述 C#解析xml文件的解析类 如何写一个C#类实现以下描述:XML文件的内容: 要求: 解析出这一句话中的CreateActivity,并生成一行字符串: NodeType=CreateActitiy;DisplayName="用户名";NodeName="Create" 请各位大神帮帮忙,写一个C#类,谢谢!

PHP实现简单实用的分页类代码_php技巧

本文实例讲述了PHP实现简单实用的分页类.分享给大家供大家参考,具体如下: <?php class Page { private $total; //总记录 private $pagesize; //每页显示多少条 private $limit; //limit private $page; //当前页码 private $pagenum; //总页码 private $url; //地址 private $bothnum; //两边保持数字分页的量 //构造方法初始化 public funct

简单实用的PHP防注入类实例_php技巧

本文实例讲述了简单实用的PHP防注入类.分享给大家供大家参考.具体如下: PHP防注入注意要过滤的信息基本是get,post,然后对于sql就是我们常用的查询,插入等等sql命令了,下面我给各位整理两个简单的例子,希望这些例子能给你网站带来安全. PHP防注入类代码如下: 复制代码 代码如下: <?php /**  * 参数处理类  * @author JasonWei  */ class Params {     public $get = array();       public $pos

简单实用的网站PHP缓存类实例_php技巧

缓存技术在实际使用当中应用非常广泛,可以有效减轻对服务器数据库的访问压力,提高运行速度.目前很多CMS内容管理系统中频繁使用缓存机制来提高系统运行的效率.本文以一个简单实用的缓存类为例,帮助大家参考下缓存的机制与写法. 缓存文件cache.php代码如下: <?php /* 用户需要事先定义的常量: _CachePath_ 模板缓存路径 _CacheEnable_ 自动缓存机制是否开启,未定义或为空,表示关闭自动缓存机制 _ReCacheTime_ 自动重新缓存间隔时间,单位为秒,未定义或为空,