Skip to content

609127400/ReadXml

Repository files navigation

READ_XML 插件

                version:1.0
                by Mr.Wang
                2017年3月10日     

目录

  1. 简介
  2. 插件信息
  3. 术语
  4. 处理限制
  5. 使用方法
  6. 作者信息和Bug反馈

简介

本插件实现对xml文件的读写,此版本只实现对标准xml文档的标签,标签属性,标签值,预定义的实体引用进行处理。由C语言实现,较适合处理大型xml文档,处理速度较快。本插件遵循GPL协议。

插件信息

语言:C
版本:1.0
编译器:GCC
运行环境:windows,linux

术语

开始标签:xml中一个标签对的开始的标签。
结束标签:xml中一个标签对的结束的标签。
值内存池:专门用于存储值的内存。
行Buffer:存储读取xml文件一行内容的内存。
空白字符:本程序中只代表文本中的空格,tab键值两个非可见字符
标签名:略。
标签属性:略。
标签属性值:略。
标签值:略。
注:为叙述方便,下文中,标签名以key,标签属性以property,标签属性值以property_value,标签值以value表示。

文件

  • read_xml.h -- read_xml头文件
  • read_xml.c -- read_xml源码
  • ReadMe.md -- read_xml说明文档
  • xml.xml -- 示例xml文件
  • libread_xml.so -- 封装的linux动态库
  • read_xml.def -- VisualStudio2015生成的windows编译动态库输出表
  • read_xml.lib -- VisualStudio2015生成的windows编译动态库接口
  • read_xml.dll -- 封装的windows动态库
  • test.c --示例

处理限制

1.文本限制

  • 只保证正确处理ANSI编码格式的xml文本。
  • 单个标签自身(无论是开始标签还是结束标签)不能跨行。
  • xml文件头中xml版本和字符集信息中的空格不做处理。
  • 开始标签的第一个属性与标签名之间必须有一个或多个空白字符。
  • 值中间和结尾的空白字符键默认保留,而值开头的空白字符将被删除。
  • 标准的引用:< > & ' " 。一个引用之中不能有空白字符,否则做普通字符处理。
  • value与开始标签之间的空格或tab键值默认不存储为值的一部分,但值与结束标签之间的空格或tab键值默认作为值的一部分。
  • 不验证xml的合法性。虽然程序已经尽可能的提高容错性,但请使用者自行尽可能地保证所读写的xml符合规范,不规范的xml不保证能正确处理。

2.数值限制

  • 值内存池:5M——整个文档标签的值,每个值字符串附加一个'\0'字符。合计最大为5M。
  • 行Buffer大小:1024 byte。
  • 标签名:<=127 byte。
  • 属性名:<=63 byte。
  • 属性值:<=63 byte。
  • 标签值:理论上单个标签值的大小为值内存池大小,但也受行Buffer大小的限制。即值可以跨行,但该值的每一行字符数应<=1024个字符。

存储方法

存储内容:标签名,属性名,属性值,值。
存储结构:伸展树,双向链表。

伸展树
存储xml内容,但不体现xml的从属结构。结点为KeyNode,以key检索元素。xml主体中所有同名标签下的所有property,property_value,value都以双向链表的形式存储在同一个KeyNode下的properties,values。
伸展树由静态全局变量LABEL_TREE管理,其中LABEL_TREE->root指向伸展树的根节点。

XML_LIST
不存储xml内容,但体现xml的从属结构。XML_LIST,以及XML_LIST中是一个双向链表,结点为XML,每个结点代表xml文本中的一个标签及其子标签整体,其子标签存储在child_list中,也是双向链表。XML_LIST自身并不存储任何xml元素,只引用自伸展树。
XML_LIST的头节点为静态全局变量XML_LIST。
此外,伸展树结点中的标签属性、值的链式存储也为双向链表。

关于存储结构的详细信息请参看read_xml.h文件。

使用方法

  • 源码编译
    源码中不涉及C99特征,简单的执行gcc test.c命令即可。根据所在系统,变更read_json.h中的系统宏定义。因read_xml属于插件范畴,故read_xml以动态库的形式呈现,所以read_xml.c中并没有主函数,且原则上只对外提供非static修饰的函数。用户可自己修改并编译,文档结构十分简单,只有一个.c文件和一个同名的.h文件。用户可自行对read_xml.h中的一些宏,主要是针对各种Buffer的大小进行配置。
  • 函数调用
    请参考read_xml.h文件对各个函数的说明。

作者信息和Bug反馈

王雅震,名不见经传,还未成为大牛,努力中...。相互学习,相互进步。个人检测有限,内存泄露检测方面,所使用的工具为valgrind,保证程序正常结束下释放所有人工分配的内存。若发现Bug,且您不嫌麻烦,还请将Bug的详细情况发邮件至 [email protected]

About

ReadXml Plug

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages