atitit.XML类库选型及object 对象bean 跟json转换方案
atitit.XML类库选型及object 对象bean 跟json转换方案
1. XML类库可以分成2大类。标准的。这些类库通常接口和实现都是分开的
1
3. 大名鼎鼎的 DOM 绿色环保的 SAX 默默无闻的 Digester
2
3.1. 默默无闻的 Digester:XML 的 JavaBean 化 2
6. bean 对象object互相转换xml XStream
5
7. json转换xml net.sf.json.JSONObject
6
7.1. json2xml 法2(马验证)..org.json包
7
1. XML类库可以分成2大类。标准的。这些类库通常接口和实现都是分开的
第一类是有标准的。这些类库通常接口和实现都是分开的, 接口通常由一些组织订立, 实现由另一些组织实现。 比如, SAX, 和 DOM。 SAX定义的是一个基于事件的XML流解析器, 没有定义模型。 而DOM定义的是一个文档对象的模型, 却没有定义从XML文件到DOM对象的过程。 这个过程的接口是由JAXP定义的。
SAX的接口包是org.xml.sax, DOM的是org.w3c, JAXP是javax.xml.parsers。
第二类的是非标准的。 都是一些对标准不满的人另起炉灶的结果。 如,jdom, 和dom4j。非标准的不一定代表不流行。dom4j就是现在最流行的XML库了。
作者:: 老哇的爪子 Attilax 艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
2. 常见的xml方面的方法
2.1. xml解析
2.2. bean与xml互相转换
2.3. json与xml的互相转换
3. 大名鼎鼎的 DOM 绿色环保的 SAX 默默无闻的 Digester
3.1. 默默无闻的 Digester:XML 的 JavaBean 化
Digester 是 apache 基金组织下的一个开源项目,笔者对它的了解源于对 Struts 框架的研究,是否有很多程序员想要一解各大开源框架的设计甚至想要自己写一个功能强大的框架时会碰到这样一个难题: 这些形形色色的用 XML 语言标记的框架配置文件,框架底层是用什么技术来解析呢? DOM 解析耗费时间,SAX 解析又过于繁琐,况且每次解析系统开销也会过大, 于是,大家想到需要用与 XML 结构相对应的 JavaBean 来装载这些信息,由此 Digester 应运而生。它的出现为 XML 转换为 JavaBean 对象的需求带来了方便的操作接口,使得更多的类似需求得到了比较完美的解决方法, 不再需要程序员自己实现此类繁琐的解析程序了。
与此同时 SUN 也推出了 XML 和 JavaBean 转换工具类 JAXB,有兴趣的读者可以自行了解。
Digester/JAXB
优缺点 : 由于其是在上述两者的基础上衍生出来的工具类,为的是满足将 XML 转换为 JavaBean 的特殊需求,故而没有什么特别明显的优缺点。作为大名鼎鼎的开源框架 Struts 的 XML 解析工具 Digester,为我们带来了将 XML 转换为 JavaBean 的可靠方法。
适用范围 : 有将 XML 文档直接转换为 JavaBean 需求。
4. Digester 解析 XML
为了满足将 XML 转换为 JavaBean 的特殊需求,Apache 旗下的一个名为 Digester 的工具为我们提供了这么一个选择。由于最终是将 XML 转化为 JavaBean 存储在内存当中, 故而解析性能等方面其实与使用者并没有多大关系。解析的关键在于用以匹配 XML 的模式以及规则等,由于该工具较为复杂,限于篇幅,作者只能给予简单的介绍。
下面是一个 Digester 解析 XML 的例子片段:
1. // 定义要解析的 XML 的路径,并初始化工具类
2. File input = new File("books.xml");
3. Digester digester = new Digester();
4.
5. // 如果碰到了 <books> 这个标签,应该初始化 test.myBean.Books 这个 JavaBean 并填装相关内容
6. digester.addObjectCreate("books", "test.myBean.Books");
7. digester.addSetProperties("books");
8. // 如果碰到了 <books/book> 这个标签,同上初始化 test.myBean.Book 这个 JavaBean
9. digester.addObjectCreate("books/book", "test.myBean.Book");
10. digester.addSetProperties("books/book");
11. // 通过调用上面已经初始化过的 JavaBean 的 addBook() 方法来把多个 <books/book> 加到一个集合中
12. digester.addSetNext("books/book", "addBook", "test.myBean.Book");
13.
14. // 定义好了上面的解析规则后,就可以开始进行解析工作了
15. Books books = (Books) digester.parse(input);
上述代码简单的向读者展示了 Digester 处理 XML 的一些要点,主要是说明了一些模式以及规则的匹配。 简言之,Digester 就是一种用来把一个 XML 转化为一个与该 XML 结构类似的 JavaBean。你可以把 XML 根元素想象成一个 JavaBean, 该根元素的 attribute 就是这个 JavaBean 的各种 Field,当该根元素有其他子 tag 时,又要把这个子 tag 想象成一个个新的 XML,将其视为一个新的 JavaBean, 并作为一个 Field 加入到父 Bean 当中,然后以此类推,通过循环的方式将整个 XML 进行解析。
5. xerces_百度百科
Xerces是由Apache组织所推动的一项XML文档解析开源项目
百度为您找到相关结果约1,560,000个
5.1. jdom
百度为您找到相关结果约240,000个
4.JDOM生成和解析XML
为减少DOM、SAX的编码量,出现了JDOM;优点:20-80原则,极大减少了代码量。使用场合:要实现的功能简单,如解析、创建等,但在底层,JDOM还是使用SAX(最常用)、DOM、Xanan文档。
3.jdom ,这个也是基于DOM实现的,但其API比DOM好用,更灵活,不是标准W3C
5.2. dom4j
百度为您找到相关结果约238,000个
DOM4J,原来是JDOM的分支,现独立开发,处于JDOM于SAX之间,即支持把XML放进内存,但可以读取时选择性删除DOM节点减少内存使用,所以也可以处理大数据XML文件,传说hibernate的配置文件也是基于dom4J(没看hibernate源码)
5.3. XStream
百度为您找到相关结果约196,000个
6. bean 对象object互相转换xml XStream
se,dom4j,jdom好像都吗,,自能 XStream
private static void obj2xml(TUserUsers u) {
XStream xstream = new XStream();
// xstream.alias("address", Address.class);
// xstream.alias("addresses", Addresses.class);
// xstream.alias("person", Person.class);
// xstream.alias("persons", Persons.class);
String xml = xstream.toXML(u);
System.out.println(xml);
}
<com.focusx.entity.TUserUsers>
<name>att</name>
<address>add</address>
<roleId>0</roleId>
</com.focusx.entity.TUserUsers>
6.1. map转换xml
<map>
<entry>
<string>total</string>
<int>1</int>
</entry>
<entry>
<string>rows</string>
<list>
<map>
<entry>
<string>file_path</string>
<string>uploadf/01.mp4</string>
</entry>
<entry>
<string>material_keyword</string>
<null/>
</entry>
</map>
</list>
</entry>
</map>
7. json转换xml net.sf.json.JSONObject
JSONObject jobj = JSONObject.fromObject(JsonX.toJsonStrO88(u));
String xml = new XMLSerializer().write(jobj);
need xom.jar
{
"address": "add",
"agentActivate": 0,
"byname": "",
"computerName": "",
"defaultGroup": 0,
"email": "",
"extensionTel": "",
"id": 0,
"ipaddress": "",
"isSystem": 0,
"isValid": 0,
"mobileTel": "",
"name": "att",
"passWord": "",
"roleId": 0,
"shortName": "",
"tel": "",
"workNo": "",
"workno2": ""
}
<?xml version="1.0" encoding="UTF-8"?>
<o>
<address type="string">add</address>
</agentActivate>
<byname type="string" />
<computerName type="string" />
</defaultGroup>
<email type="string" />
<extensionTel type="string" />
</id>
<ipaddress type="string" />
</isSystem>
</isValid>
<mobileTel type="string" />
<name type="string">att</name>
<passWord type="string" />
</roleId>
<shortName type="string" />
<tel type="string" />
<workNo type="string" />
<workno2 type="string" />
</o>
7.1. json2xml 法2(马验证)..org.json包
JSONObject(javabean转换xml形式和JSON形式)
在org.json包下面有很多实用的类比如JSONObject,它可以把javabean对象转换成JSON形式,也可以转换成xml形式. User user = new User();user.setName("wujunjie");user.setPass("123345");JSONObject jsonobject = new JSONObject(user);System.out.println(jsonobject.toString());//{"name":"wujunjie","pass":"123345"}String xml = XML.toString(jsonobject);System.out.println(xml);//<name>wujunjie</name><pass>123345</pass>
8. 参考
Java处理XML的三种主流技术及介绍(2) - 51CTO.COM.htm
Java 的JSON、XML转换方法——目录索引 - hoojo - 博客园.htm
利用XStream在Java对象和XML之间相互转换 - 熔 岩 - 51CTO技术博客.htm
atitit.XML类库选型及object 对象bean 跟json转换方案的更多相关文章
- php如何遍历多维的stdClass Object 对象,php的转换成数组的函数只能转换外面一丛数组
php如何遍历多维的stdClass Object 对象,php的转换成数组的函数只能转换外面一丛数组 (2012-09-10 19:58:49) 标签: 杂谈 分类: 网页基础知识 php如何遍历多 ...
- Atitit xml框架类库选型 attilax总结
Atitit xml框架类库选型 attilax总结 1. 1. XML类库可以分成2大类.标准的.这些类库通常接口和实现都是分开的1 2. Jdom 和dom4j1 2.1. 5.1. jdom1 ...
- Java中把对象、对象bean、list集合、对象数组、Map和Set以及字符串转换成Json
对象转换为Json 对象bean转换为Json List集合转换为Json 对象数组转换为Json Map集合转换为Json Set集合转为Json 字符串转换为Json 把Java对常用的一些数据转 ...
- 18-[JavaScript]-函数,Object对象,定时器,正则表达式
1.函数创建 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti ...
- 如何将js的object对象传到后台--->JavaScript之对象序列化
一个问题:前台js如何传Object对象到后台哪 百度了半天,结果如下:只需要将object对象转化成json格式 然后传到后台 再在后台解析json字符串即可 那么问题来了: Object如何转 ...
- gson之将对象转化成json字符串的方法
public class GsonUtil { /** * 将object对象转成json格式字符串 */ public static String toJson(Object object) { G ...
- Atitit.atijson 类库的新特性设计与实现 v3 q31
Atitit.atijson 类库的新特性设计与实现 v3 q31 1. V1版本---集成了多引擎1 2. V2版本新特性 --bsh脚本化2 3. V3版本新特性---循环引用解决使用fastjs ...
- xml、bean、json互转工具,可直接CV就用
1.jar包 <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactI ...
- Atitit 跨平台异常处理(2)--------异常转换 -----java c# js异常对象结构比较and转换
Atitit 跨平台异常处理(2)--------异常转换 -----java c# js异常对象结构比较and转换 { "@type":"java.lang.Runti ...
随机推荐
- git hub的GUI软件配置与使用
1. 安装两个软件 1. git的命令行程序--git for windows:http://git-scm.com/download/win 2. git的GUI程序--tortoisegit:ht ...
- 用 Nokitjs 解决前端开发中的跨域问题
问题 在开发一些「单页应用」时,通常会使用 Ajax 和服务器通讯,比如 RESTful API,通常「前端」和「服务端 API」可能是有不同人员在负责,也不在同一个工程下,那么开发过程中就可能会遇到 ...
- iOS中WebKit框架应用与解析
WebKit是iOS8之后引入的专门负责处理网页视图的框架,其比UIWebView更加强大,性能也更优. 引言 在iOS8之前,在应用中嵌入网页通常需要使用UIWebView这样一个类,这个类通过UR ...
- jquery操作CSS样式全记录
$(this).click(function(){ if($(this).hasClass(“zxx_fri_on”)){ $(this).removeClass(“zxx_fri_on”); ...
- mysql数据库维护(备份和还原)和性能提高
为了有效防止数据丢失,并将损失降到最低,应对数据库服务器做维护.数据库维护,包括数据备份,还原,导出和导入操作. 1. MySQL数据库备份 所谓数据库维护,主要包含备份数据,还原数据和数据库迁移,对 ...
- RHEL7.0 配置网络IP的三种方法
导读 RHEL7里面的网卡命名方式从eth0,1,2的方式变成了enoXXXXX的格式. en代表的是enthernet (以太网),o 代表的是onboard (内置),那一串数字是主板的某种索引编 ...
- linux 的空命令:(冒号)
php里面又“空操作”这个东西,于是想一想linux的命令中是否有“空命令”这种东西,搜索一下,结果发现真的有这个东西存在 -------:) 冒号 : 就是空命令.即什么也不做,是一个命令占位符 # ...
- (剑指Offer)面试题53:正则表达式匹配
题目: 请实现一个函数用来匹配包括'.'和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个模式. ...
- 真人测试网站用户体验的超棒在线服务 - Peek by UserTesting
闲逛的过程中找到的这个工具网站,它可以帮助你测试你的网站用户体验,而且会发送给你一个5分钟的视频来展示一个实际的用户(不是机器,是人哦)如何操作你的网站的,这个服务目前免费,大家如果有兴趣了解你的网站 ...
- PHP如何使用免费在线客服插件
1 你可以从以下网址下载http://www.hur.cn/Soft/2011/12448.html 2 解压并放到任意文件夹下 3 在安装之前,先在数据库中创建一个完整的数据库,因为待会儿安装完成之 ...