微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

XML文件解析C++Binding

网络上有许多XML开源的解析器,例如libxml,tinyxml等。之前研究过一段C语言写的XML解析器,基于状态机的思想。最近项目有用到XML文件就把tinyxml也研究了一下,顺便把之前那个C语言写的解析器与tinyxml的部分来了个结合,得到一个杂交产物:XMLPARSER-C++BINDING,以下简称BINDING。

这里说说BINDING运用到的一些知识点。

1.Visitor(访问者)模式,按照官方的说法:visitor模式定义一组操作,作用于某个对象结构里的各个元素。
达到不修改元素的前提下给元素增加新的操作。在XML解析器结束后我们会得到各种类别的node,例如之前说到的COMMENT(注释)/TEXT(文本)/START_TAG(起始标签)等等。不同的客户会对这些node做不一样的操作,有些可能只是希望把这些node的内容打印出来而已,有些可能希望把这些内容输出写到文本文件,或者通过网络发送给其他客户端等等。Visitor的作用当然不止于此,<<可复用对象软件>>总结了visitor:适用于一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作。在这里只是个人觉得用的恰倒好处。Binding提供了一个认的PrinterVisitor用于把BINDING构建的DOM树节点内容输出,也可以说是为了DEBUG目的吧!

2.清晰的TREE结构。之前写的C版本的PARSER基于builder模式,没有树的概念,操作起来还是有一定的弊端,有了DOM树可以有更加清晰的层次结构。用户看到的是一个DOCUMENT对象,该对象可以看成是树的root节点,root节点的第一个子节点一定是预处理指令节点即:包含一些XML文件的版本信息以及编码方式。需要说明的是,start_tag节点与同名的end_tag属于同级节点,start_tag允许包含其他start_tag节点,text节点,comment节点等,是一个递归的操作。如果需要得到某个start_tag所包含的内容,那么遍历终止的条件一定是得到一个同级的同名的end_tag节点。

  PS:其他操作请参看源码:点击下载   The_End。

原文地址:https://www.jb51.cc/xml/299138.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。