EasyXML使用指南_第1页
EasyXML使用指南_第2页
EasyXML使用指南_第3页
EasyXML使用指南_第4页
EasyXML使用指南_第5页
已阅读5页,还剩4页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Easy XML使用指南文档信息项目名称Easy XML -通用XML解析器需求编号文档编号作者曾臻创建日期2006-3-10版本号1.0审核人审核日期修改记录修改日期作者说明审核人1 引言XMLEasy XML是为C+研发的XML解析器,它利用了 C+勺函数重载、函数对象等语言特性方便了程序员对 解析代码的编写。本库不依赖于其它的XML解析器(如XML4C,实现上完全基于 STL。2 指南2.1 例子2.1.1 XML 的生成下面这段代码演示了怎样使用Easy XML来生成XML文档:#include pub_easy_xml.h#include #include #include void

2、 main()/create root elementElement info(info,Element:ROOT|Element:COMPLEX);/create and assemble pet elementsElement pet(pet);pet.setAttribute(species,mouse)(sex,female)(age,1)(name,Jerry)(weight,200g); info.addChild(pet); pet(species)=cat; pet(sex)=male; pet(age)=2; pet(name)=Tom; pet(weight)=2kg; i

3、nfo.addChild(pet);/create and assemble band elementsElement band(band);band.setAttribute(name,BEYOND)(style,Art Rock)(members,5)(birthday,1983);Eleme nt member(member);member.addChild(”name,Huang Jia Ju)(positio n,Voice ,L ead Guitar);ban d.addChild(member);member name=Hua ng Jia Qia ng;memberpositi

4、 on =Bass;ban d.addChild(member);in fo.addChild(ba nd);/gen erate xml stri ngstri ng outXml;Parser parser;parser outXml;/output to xml fileofstream of(i nfo.xml);ofoutXml;of.close();生成的info.xml内容如下:- cpet age=2 name=Tom sex = male spe匚迢三二上日上weight=ll2kg /-cnameHuang Jia JuwpositionVoicejrLead Guitar

5、-Huang Jid Qiang Bass2.1.2 XML的解析下面这段代码演示了怎样使用Easy XML来解析XMI文档:#in elude pub_easy_xml.h#in elude #in elude #in elude void mai n()/input from xml fileifstream file(info.xml);string inXml;while(!file.eof() inXml+=file.get();file.close();/parse xml stringParser parser;Element info; parserinfo;/access e

6、lement through operatorcoutThe first petname is infopet0(name)endl; coutThe first member of the first band isinfoband0member0name.getValue()endl;/access element through referenceElement& mouse=infopet1; coutThe second pets name is mouse(name)endl;/access element through index coutendlList of all pet

7、s:endl;Element& pet=infopet;for(long index=0;indexpet.getCount();index+)Element& e=petindex; coutNo.index+1endl; coutspecies: e(species)endl; coutname: e(name)endl; coutage: e(age)endl; coutsex: e(sex)endl;/access element through iterator coutendlList of all members of BEYOND:endl;Element& member=in

8、foband0member;for(Element* pe=member.firstElement();member.hasMoreElements();pe=member.nextElement() Element& e=*pe;coutename.getValue() is playing eposition.getValue() in the bandendl; 运行结果如下:The first pet name is JerryThe first member of the first band is Huang Jia JuThe sec ond pets n ame is TomL

9、ist of all pets:No.1species: mousen ame: Jerryage: 1sex: femaleNo.2species: catn ame: Tomage: 2sex: maleList of all members of BEYOND:Huang Jia Ju is play ing Voice,Lead Guitar in the bandHuang Jia Qiang is play ing Bass in the band3.1 Element 组件3.1.1基本概念- cpet age=2 ndme=Tom sex = malc spe匚旧三二ent/-

10、Huang Jia Ju町p口sitionVoicefLead Guitar-Huang Jid QiangBass/banebElement用来描述XM的元素,它可以分为 复合元素和非复合元素。非复合元素属于XM结构树中“叶子”: 用于存放文本信息; 复合元素是任意元素的容器, 不可以存放信息。如图,membe就是复合元素,name和position 都是非复合元素。XMI元素还可以分为可重复元素和不可重复元素。可重复元素用来描述所有结构相同的同名元素,不可重复元素则只能描述独一无二的元素。如图,pet和membe是可重复元素;info,name和position是不可重复元素;band是可

11、重复元素,只不过它当前的重复度为1。还有一种XML元素叫根元素,它表示一个XM文档中唯 一的那个顶层元素,根元素不能是可重复元素,可以是复合元素或非复合元素。如图,info就是根元素。XML元素还可以携带若干个属性信息。3.1.2 Element 的创建在Element中用了下面这样一个枚举来表示元素类型:enum ElementTypeREPEATABLE=0x1,COMPLEX=0x2,SIMPLE=0x0,ROOT=0x4;Element 的一个构造方法定义如下:explicit Element(const string& str_name,int n_type=COMPLEX);参数一

12、表示元素名, 参数二表示元素类型, 缺省值是复合元素。 元素类型可以通过运算符 | 进行组合, REPEATABLE 不能和R00组合。例如,要构造一个前面提到的可重复的复合元素membe可以这么写:Element e(member,Element:REPEATABLE|Element:C0MPLEX);要构造一个复合顶层元素 root 可以这么写:Element e(info,Element:R00T|Element:C0MPLEX);3.1.3 Element 的组装可以用过下面几种方式把一个元素组装到另一个复合元素中:1. 以Element的引用为参数加入已存在的子元素,子元素可以是任意

13、类型 member.addChild(name)(position);2. 以元素名和元素值(可缺省)为参数加入子元素,这将生成一个新的携带着给定值(或缺省)的非复合型的pet.addChild(species,dog)(name) /缺省元素值为空字符串(age,2) /整型元素值将被装换成字符串(sex,male)(weight,2kg);应该注意的是, 当加入新的不可重复的元素时, 如果容器中已经存在同名元素, 则新元素将合并到容器中的同名 元素中,如果容器中的同名元素是不可重复型的,则它将在合并后转变为可重复型的。3.1.4 Element 的属性设置用以下几种方式可以设置元素的属性:

14、1. 用 setAttribute() pet.setAttribute(species,mouse)(sex,female)(age,1)(name,Jerry)(weight,200g);2. 通过重载操作符 () pet(species)=cat; pet(sex)=male;pet(age)=2;pet(name)=Tom;pet(weight)=2kg;3.1.5 Element 的访问3.1.5.1 访问元素值1. 通过 getValue()/setValue() 访问值Element element(element,Element:SIMPLE);string value=ele

15、ment.getValue(); element.setValue(thit is value);element.setValue(12); / 值将被转换为 string2. 通过重载操作符 =赋值,重载类型转换 string() 获取值Element element(element,Element:SIMPLE);string value=element;element=this is value;element=12; / 值将被转换为 string3.1.5.2 访问属性1. 通过 getAttribute() 访问属性string name=pet.getAttribute(name

16、);2. 通过重载操作符 () 反问属性string name=pet(name);这两种方式的区别在于: 前者获取的属性必须是存在的, 否则会抛出异常; 当后者获取的属性不存在时将会自动 将其设为空字符串,并返回其引用。3.1.5.3 访问子元素1. 通过 getChild() 访问子元素Element& name=member.getChild(name);2. 通过重载操作符 访问子元素Element& name=membername;这两种方式的区别在于: 当前者获取的子元素不存在时, 将返回一个 空元素 的引用 (空元素的表示不存在的元素 它的重复度为 0,相当与集合中的空集);当后

17、者获取的元素不存在时,将会自动生成相应的子元素该元素的类型为SIMPLE,并返回其引用。于是我们可以像下面这样设置子元素:membername=Huang Jia Qiang;memberposition=Bass;3.1.5.4 访问可重复元素1. 通过 elementAt() 访问可重复元素Element& mouse=pet.elementAt(1);2. 通过重载操作符访问可重复元素Element& e=petindex;当索引超出容器范的用法1 的可重复元素。这两种方式没有区别, 都表示从元素 pet 所描述的一系列的同名元素中获得某个元素的引用, 围时会抛出异常。3. 通过迭代器遍

18、历可重复元素,请注意 firstElement(),hasMoreElements(),nextElement() coutendlList of all members of BEYOND:endl;Element& member=infoband0member;for(Element* pe=member.firstElement();member.hasMoreElements();pe=member.nextElement() Element& e=*pe;coutename.getValue() is playing eposition.getValue() in the bandendl; 这三种访问可重复元素的方法同样适用与简单元素。在这些情况中,可以把后者看作重复度为3.1.6 Element 的其它功能toProperties() -获取属性 mapnewElement()-生成同名同构属性框架growElement()-可重复元素的膨胀s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论