ReadXml 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
ReadXml 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
ReadXml 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
ReadXml 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
ReadXml 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !

软件简介

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

术语

开始标签: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.lib -- VisualStudio2015生成的windows编译动态库接口

  • read_xml.dll -- 封装的windows动态库

  • test.c --示例

处理限制

 1.文本限制

  • 单个标签自身(无论是开始标签还是结束标签)不能跨行。

  • 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特征,因read_xml属于插件范畴,故read_xml以动态库的形式呈现,所以read_xml.c中并没有主函数,且原则上只对外提供非static修饰的函数。用户可自己编译,文档结构十分简单,只有一个.c文件和一个同名的.h文件。用户可自行对read_xml.h中的一些宏,主要是针对各种Buffer的大小进行配置。

  • 函数调用
    请参考read_xml.h文件对各个函数的说明。

展开阅读全文

代码

评论 (0)

加载中
更多评论
暂无内容
发表了博客
2018/07/19 15:58

readXml序列化

上篇写了读取xml简单的方法,但是比较麻烦,所以优化了一下,通过序列化来读取配置文件. xml格式: <?xml version="1.0"?> <StatsConfigTwo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <statsDate>2018-07-19T15:33:41.0708883+08:00</statsDate> <readBarTotalCount>3</readBarTotalCount> <readBarSuccessCount>3</readBarSuccessCount> <readBarFailC...

0
0
发表了博客
2019/02/19 09:49

c#用ReadXml和WriteXml将xml的数据读取到DataSet中,填充到Datetable 中写入数据库

1.xml文档的内容 2.对xml文件读取 DataSet ds = new DataSet(); ds.ReadXml("D:\\项目文档\\定远法院公告\\定远法院公告\\Web\\Site\\code.xml"); DataTable dt = new DataTable(); //节点的选取 dt = ds.Tables[2]; for (int i = 0; i < dt.Rows.Count; i++) { EAJ_FTSY eaj = new EAJ_FTSY(); eaj = EAJ_FTSYManage...

0
0
发表了博客
2012/02/26 11:16

java写入xml

package com.cn; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class ReadXml { public ReadXml() { // 得到Dom解析工厂 Do...

0
0
发表了博客
2020/01/20 16:16

读取JDBC配置文件的二种方式

一 读取jdbc.properties文件 1 新建jdbc.properties文件,如下: jdbc.user=root jdbc.password=123456 jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://xxx.xxx.xxx.xxx:3306/database?useUnicode=true&characterEncoding=utf8 2 编写readPro()方法如下: private static void readPro() { Properties pro=new Properties(); InputStream in = PropertiesTest.class.getClassLoader().getResourc...

0
0
发表了博客
2011/09/06 15:14

Loading XML with Javascript

Loading XML with Javascript There are three methods I know of that can be used by Javascript to load an XML document for parsing and display in the HTML by Javascript. They are given below, along with a table that shows the results each of these methods will have when loading an XML document by Javascript using the various browsers available for Windows platforms. By a local HTML or local XML f...

0
0
发表了博客
2018/07/29 09:44

转帖 java使用poi.3.10读取excel 2010

package poi; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; imp...

0
0
发表了博客
2014/05/21 13:06

Android 调用webservice并解析

这是调用webService的具体方法 private final static String nameSpace="http://tempuri.org/";     private final static String url = "http://10.188.65.139/BizNavi_Link_Phone/Service.asmx?wsdl";          public static List<WaitModel> CallWebService1() {         // 调用webservice的具体方法                 String nameSpace = "http://tempuri.org/"; ...

0
0
发表于开发技能专区
2020/11/10 12:55

java 读取 xml

1,readXML package com.bn.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Iterator; import java.util.Properties; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j....

0
0
发表了博客
2013/01/04 21:01

分享一个解析xml的小工具

因为项目的需求,自己写了一个解析xml的工具:如下, if you want to it,please read the class of readXML;action :the model must be impl the interface of IModel,自定义的model, 譬如我们有个xml,这里是自定义的 <?xml version="1.0" encoding="UTF-8"?> <root> <Scenes> <base> <id>1</id> <name> 亚特兰蒂斯</name> </base> </Scenes> <!--任务模块--> <Ta...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
1 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部