atitit.XML类库@H_404_3@@H_404_3@选型及object@H_404_3@对象@H_404_3@bean@H_404_3@跟@H_404_3@json@H_404_3@转换方案@H_404_3@@H_404_3@
@H_404_3@
@H_404_3@
1.XML类库可以分成2大类。标准的。这些类库通常接口和实现都是分开的 1
3.大名鼎鼎的DOM绿色环保的SAX默默无闻的Digester 2
3.1.默默无闻的Digester:XML的JavaBean化 2
6.bean对象object互相转换xmlXStream 5
7.json转换xmlnet.sf.json.JSONObject 6
7.1.json2xml法2(马验证)..org.json包 7
@H_404_3@
1.XML类库可以分成@H_404_3@2@H_404_3@大类。@H_404_3@标准的。这些类库通常接口和实现都是分开的@H_404_3@
@H_404_3@第一类是有标准的。这些类库通常接口和实现都是分开的,@H_404_3@@H_404_3@接口通常由一些组织订立,实现由另一些组织实现。比如,@H_404_3@SAX@H_404_3@,和@H_404_3@DOM@H_404_3@。@H_404_3@SAX@H_404_3@定义的是一个基于事件的@H_404_3@XML@H_404_3@流解析器,没有定义模型。而@H_404_3@DOM@H_404_3@定义的是一个文档对象的模型,却没有定义从@H_404_3@XML@H_404_3@文件到@H_404_3@DOM@H_404_3@对象的过程。这个过程的接口是由@H_404_3@JAXP@H_404_3@定义的。@H_404_3@@H_404_3@@H_404_3@SAX的接口包是@H_404_3@org.xml.sax,DOM@H_404_3@的是@H_404_3@org.w3c,JAXP@H_404_3@是@H_404_3@javax.xml.parsers@H_404_3@。@H_404_3@@H_404_3@@H_404_3@第二类的是非标准的。都是一些对标准不满的人另起炉灶的结果。如,@H_404_3@jdom,@H_404_3@和@H_404_3@dom4j@H_404_3@。非标准的不一定代表不流行。@H_404_3@dom4j@H_404_3@就是现在最流行的@H_404_3@XML@H_404_3@库了。@H_404_3@@H_404_3@
@H_404_3@
作者::老哇的爪子Attilax艾龙,EMAIL:1466519819@qq.com
转载请注明来源:http://blog.csdn.net/attilax
2.常见的xml方面的方法@H_404_3@
2.1.xml解析@H_404_3@
2.2.bean与@H_404_3@xml@H_404_3@互相转换@H_404_3@
2.3.json与@H_404_3@xml@H_404_3@的互相转换@H_404_3@
@H_404_3@
3.大名鼎鼎的DOM@H_404_3@绿色环保的SAX@H_404_3@默默无闻的Digester@H_404_3@
@H_403_206@3.1.@H_404_3@@H_403_206@默默无闻的Digester:XML的JavaBean化@H_404_3@
@H_403_206@Digester是apache基金组织下的一个开源项目,笔者对它的了解源于对Struts框架的研究,是否有很多程序员想要一解各大开源框架的设计甚至想要自己写一个功能强大的框架时会碰到这样一个难题:这些形形色色的用XML语言标记的框架配置文件,框架底层是用什么技术来解析呢?DOM解析耗费时间,SAX解析又过于繁琐,况且每次解析系统开销也会过大,于是,大家想到需要用与XML结构相对应的JavaBean来装载这些信息,由此Digester应运而生。它的出现为XML转换为JavaBean对象的需求带来了方便的操作接口,使得更多的类似需求得到了比较完美的解决方法,不再需要程序员自己实现此类繁琐的解析程序了。@H_404_3@
与此同时SUN也推出了XML和JavaBean转换工具类JAXB,有兴趣的读者可以自行了解。@H_404_3@
Digester/JAXB@H_404_3@
优缺点:由于其是在上述两者的基础上衍生出来的工具类,为的是满足将XML转换为JavaBean的特殊需求,故而没有什么特别明显的优缺点。作为大名鼎鼎的开源框架Struts的XML解析工具Digester,为我们带来了将XML转换为JavaBean的可靠方法。@H_404_3@
适用范围:有将XML文档直接转换为JavaBean需求。@H_404_3@
@H_404_3@
@H_403_206@4.@H_404_3@@H_403_206@Digester解析XML@H_404_3@
为了满足将XML转换为JavaBean的特殊需求,Apache旗下的一个名为Digester的工具为我们提供了这么一个选择。由于最终是将XML转化为JavaBean存储在内存当中,故而解析性能等方面其实与使用者并没有多大关系。解析的关键在于用以匹配XML的模式以及规则等,由于该工具较为复杂,限于篇幅,作者只能给予简单的介绍。@H_404_3@
下面是一个Digester解析XML的例子片段:@H_404_3@
1.@H_404_3@//定义要解析的@H_404_3@XML@H_404_3@的路径,并初始化工具类@H_404_3@@H_404_3@@H_404_3@
2.@H_404_3@Fileinput=@H_404_3@new@H_404_3@File(@H_404_3@"books.xml"@H_404_3@);@H_404_3@
3.@H_404_3@Digesterdigester=@H_404_3@Digester();@H_404_3@
5.@H_404_3@//如果碰到了@H_404_3@<books>@H_404_3@这个标签,应该初始化@H_404_3@test.myBean.Books@H_404_3@这个@H_404_3@JavaBean@H_404_3@并填装相关内容@H_404_3@@H_404_3@6.@H_404_3@digester.addObjectCreate(@H_404_3@"books"@H_404_3@,@H_404_3@"test.myBean.Books"@H_404_3@7.@H_404_3@digester.addSetProperties(@H_404_3@);@H_404_3@
8.@H_404_3@//如果碰到了@H_404_3@<books/book>@H_404_3@这个标签,同上初始化@H_404_3@test.myBean.Book@H_404_3@这个@H_404_3@JavaBean@H_404_3@@H_404_3@9.@H_404_3@"books/book"@H_404_3@"test.myBean.Book"@H_404_3@10.@H_404_3@11.@H_404_3@//通过调用上面已经初始化过的@H_404_3@JavaBean@H_404_3@的@H_404_3@addBook()@H_404_3@方法来把多个@H_404_3@<books/book>@H_404_3@加到一个集合中@H_404_3@@H_404_3@12.@H_404_3@digester.addSetNext(@H_404_3@"addBook"@H_404_3@13.@H_404_3@14.@H_404_3@//定义好了上面的解析规则后,就可以开始进行解析工作了@H_404_3@@H_404_3@15.@H_404_3@Booksbooks=(Books)digester.parse(input);@H_404_3@
上述代码简单的向读者展示了Digester处理XML的一些要点,主要是说明了一些模式以及规则的匹配。简言之,Digester就是一种用来把一个XML转化为一个与该XML结构类似的JavaBean。你可以把XML根元素想象成一个JavaBean,该根元素的attribute就是这个JavaBean的各种Field,当该根元素有其他子tag时,又要把这个子tag想象成一个个新的XML,将其视为一个新的JavaBean,并作为一个Field加入到父Bean当中,然后以此类推,通过循环的方式将整个XML进行解析。@H_404_3@
@H_404_3@
5.@H_404_3@xerces_百度百科
Xerces@H_404_3@是由Apache@H_404_3@组织所推动的一项@H_404_3@XML@H_404_3@文档解析开源项目@H_404_3@@H_404_3@
百度为您找到相关结果约1,560,000@H_404_3@个@H_404_3@@H_404_3@
@H_404_3@
5.1.jdom
百度为您找到相关结果约240,000@H_404_3@个@H_404_3@@H_404_3@
@H_403_206@4.JDOM生成和解析XML@H_404_3@@H_403_206@@H_404_3@
为减少DOM、SAX的编码量,出现了JDOM;优点:20-80原则,极大减少了代码量。使用场合:要实现的功能简单,如解析、创建等,但在底层,JDOM还是使用SAX(最常用)、DOM、Xanan文档。@H_404_3@
3.jdom,这个也是基于DOM实现的,@H_404_3@但其API比DOM好用,更灵活,不是标准W3C@H_404_3@
4@H_404_3@
@H_404_3@
5.2.dom4j
@H_404_3@
百度为您找到相关结果约238,000@H_404_3@个@H_404_3@@H_404_3@
DOM4J,原来是JDOM的分支,现独立开发,处于JDOM于SAX之间,即支持把XML放进内存,但可以读取时选择性删除DOM节点减少内存使用,所以也可以处理大数据XML文件@H_404_3@,传说hibernate的配置文件也是基于dom4J(没看hibernate源码)@H_404_3@
@H_404_3@
5.3.XStream
百度为您找到相关结果约196,000@H_404_3@个@H_404_3@@H_404_3@
@H_404_3@
6.bean对象@H_404_3@object@H_404_3@互相转换@H_404_3@xml@H_404_3@XStream@H_404_3@
se,dom4j,jdom好像都吗,,自能@H_404_3@XStream@H_404_3@
private@H_404_3@@H_404_3@static@H_404_3@@H_404_3@void@H_404_3@obj2xml(TUserUsers@H_404_3@u@H_404_3@){@H_404_3@
@H_404_3@
XStream@H_404_3@xstream@H_404_3@=@H_404_3@new@H_404_3@XStream();@H_404_3@
//@H_404_3@xstream.alias("address",Address.class);@H_404_3@
//@H_404_3@xstream.alias("addresses",Addresses.class);@H_404_3@
//@H_404_3@xstream.alias("person",Person.class);@H_404_3@
//@H_404_3@xstream.alias("persons",Persons.class);@H_404_3@
String@H_404_3@xml@H_404_3@=@H_404_3@xstream@H_404_3@.toXML(@H_404_3@u@H_404_3@);@H_404_3@
System.@H_404_3@out@H_404_3@.println(@H_404_3@xml@H_404_3@);@H_404_3@
}@H_404_3@
<com.focusx.entity.TUserUsers>@H_404_3@
<name>att</name>@H_404_3@
<address>add</address>@H_404_3@
<roleId>0</roleId>@H_404_3@
</com.focusx.entity.TUserUsers>@H_404_3@
@H_404_3@
@H_404_3@
6.1.map转换@H_404_3@xml@H_404_3@
<map>@H_404_3@
<entry>@H_404_3@
<string>total</string>@H_404_3@
<int>1</int>@H_404_3@
</entry>@H_404_3@
<entry>@H_404_3@
<string>rows</string>@H_404_3@
<list>@H_404_3@
<map>@H_404_3@
<entry>@H_404_3@
<string>file_path</string>@H_404_3@
<string>uploadf/01.mp4</string>@H_404_3@
</entry>@H_404_3@
<entry>@H_404_3@
<string>material_keyword</string>@H_404_3@
<null/>@H_404_3@
</entry>@H_404_3@
@H_404_3@
</map>@H_404_3@
</list>@H_404_3@
</entry>@H_404_3@
</map>@H_404_3@
7.json转换@H_404_3@xml@H_404_3@net.sf.json.JSONObject@H_404_3@
JSONObject@H_404_3@jobj@H_404_3@=JSONObject.@H_404_3@fromObject@H_404_3@(JsonX.@H_404_3@toJsonStrO88@H_404_3@(@H_404_3@u@H_404_3@));@H_404_3@
String@H_404_3@xml@H_404_3@=@H_404_3@new@H_404_3@@H_404_3@XMLSerializer@H_404_3@().write(@H_404_3@jobj@H_404_3@);@H_404_3@
needxom.jar
{@H_404_3@
"address":"add",@H_404_3@
"agentActivate":0,@H_404_3@
"byname":"",@H_404_3@
"computerName":"",@H_404_3@
"defaultGroup":0,@H_404_3@
"email":"",@H_404_3@
"extensionTel":"",@H_404_3@
"id":0,@H_404_3@
"ipaddress":"",@H_404_3@
"isSystem":0,@H_404_3@
"isValid":0,@H_404_3@
"mobileTel":"",@H_404_3@
"name":"att",@H_404_3@
"passWord":"",@H_404_3@
"roleId":0,@H_404_3@
"shortName":"",@H_404_3@
"tel":"",@H_404_3@
"workNo":"",@H_404_3@
"workno2":""@H_404_3@
}@H_404_3@
@H_404_3@
<?@H_404_3@xml@H_404_3@version@H_404_3@=@H_404_3@"1.0"@H_404_3@encoding@H_404_3@=@H_404_3@"UTF-8"@H_404_3@?>@H_404_3@
<@H_404_3@o@H_404_3@>@H_404_3@
<@H_404_3@address@H_404_3@type@H_404_3@=@H_404_3@"string"@H_404_3@>@H_404_3@add@H_404_3@</@H_404_3@address@H_404_3@>@H_404_3@
<@H_404_3@agentActivate@H_404_3@type@H_404_3@=@H_404_3@"number"@H_404_3@>@H_404_3@0@H_404_3@</@H_404_3@agentActivate@H_404_3@>@H_404_3@
<@H_404_3@byname@H_404_3@type@H_404_3@=@H_404_3@"string"@H_404_3@/>@H_404_3@
<@H_404_3@computerName@H_404_3@type@H_404_3@=@H_404_3@"string"@H_404_3@/>@H_404_3@
<@H_404_3@defaultGroup@H_404_3@type@H_404_3@=@H_404_3@"number"@H_404_3@>@H_404_3@0@H_404_3@</@H_404_3@defaultGroup@H_404_3@>@H_404_3@
<@H_404_3@email@H_404_3@type@H_404_3@=@H_404_3@"string"@H_404_3@/>@H_404_3@
<@H_404_3@extensionTel@H_404_3@type@H_404_3@=@H_404_3@"string"@H_404_3@/>@H_404_3@
<@H_404_3@id@H_404_3@type@H_404_3@=@H_404_3@"number"@H_404_3@>@H_404_3@0@H_404_3@</@H_404_3@id@H_404_3@>@H_404_3@
<@H_404_3@ipaddress@H_404_3@type@H_404_3@=@H_404_3@"string"@H_404_3@/>@H_404_3@
<@H_404_3@isSystem@H_404_3@type@H_404_3@=@H_404_3@"number"@H_404_3@>@H_404_3@0@H_404_3@</@H_404_3@isSystem@H_404_3@>@H_404_3@
<@H_404_3@isValid@H_404_3@type@H_404_3@=@H_404_3@"number"@H_404_3@>@H_404_3@0@H_404_3@</@H_404_3@isValid@H_404_3@>@H_404_3@
<@H_404_3@mobileTel@H_404_3@type@H_404_3@=@H_404_3@"string"@H_404_3@/>@H_404_3@
<@H_404_3@name@H_404_3@type@H_404_3@=@H_404_3@"string"@H_404_3@>@H_404_3@att@H_404_3@</@H_404_3@name@H_404_3@>@H_404_3@
<@H_404_3@passWord@H_404_3@type@H_404_3@=@H_404_3@"string"@H_404_3@/>@H_404_3@
<@H_404_3@roleId@H_404_3@type@H_404_3@=@H_404_3@"number"@H_404_3@>@H_404_3@0@H_404_3@</@H_404_3@roleId@H_404_3@>@H_404_3@
<@H_404_3@shortName@H_404_3@type@H_404_3@=@H_404_3@"string"@H_404_3@/>@H_404_3@
<@H_404_3@tel@H_404_3@type@H_404_3@=@H_404_3@"string"@H_404_3@/>@H_404_3@
<@H_404_3@workNo@H_404_3@type@H_404_3@=@H_404_3@"string"@H_404_3@/>@H_404_3@
<@H_404_3@workno2@H_404_3@type@H_404_3@=@H_404_3@"string"@H_404_3@/>@H_404_3@
</@H_404_3@o@H_404_3@>@H_404_3@
@H_404_3@
7.1.json2xml法@H_404_3@2(@H_404_3@马验证@H_404_3@)..@H_404_3@org.json包@H_404_3@@H_404_3@
JSONObject(javabean转换xml形式和JSON形式)
在org.json包下面有很多实用的类比如JSONObject,它可以把javabean对象转换成JSON形式,也可以转换成xml形式.Useruser=newUser();user.setName("wujunjie");user.setPass("123345");JSONObjectjsonobject=newJSONObject(user);System.out.println(jsonobject.toString());//{"name":"wujunjie","pass":"123345"}Stringxml=XML.toString(jsonobject);System.out.println(xml);//<name>wujunjie</name><pass>123345</pass>@H_404_3@
@H_404_3@
8.参考
Java处理@H_404_3@XML@H_404_3@的三种主流技术及介绍@H_404_3@(2)-51CTO.COM.htm@H_404_3@@H_404_3@
Java的@H_404_3@JSON@H_404_3@、@H_404_3@XML@H_404_3@转换方法——目录索引@H_404_3@-hoojo-@H_404_3@博客园@H_404_3@.htm@H_404_3@@H_404_3@
利用XStream@H_404_3@在@H_404_3@Java@H_404_3@对象和@H_404_3@XML@H_404_3@之间相互转换@H_404_3@-@H_404_3@熔岩@H_404_3@-51CTO@H_404_3@技术博客@H_404_3@.htm@H_404_3@@H_404_3@