`
AmwuYYGY
  • 浏览: 26792 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

不写一行代码,也能解释XML,因为是JAVA

阅读更多
不写一行代码,也能解释XML,因为是JAVA。

整个过程就三个步骤
1、XML转换成XSD
2、XSD生成JAVA Class
3、调用unmarshal实现转换结果


具体实例:
1、假设有一个XML文件,格式如下:
<?xml version="1.0" encoding="gb2312"?>
<CRS.CommandSet.PNR>
	<Version>1.2.0.6</Version>
	<PNR>E3FNK</PNR>
	<AgentOffice>BJS888</AgentOffice>
	<Group No="" Sum=""/>
	<Passengers>
		<Passenger ElementNo="1" PsgID="1" Name="MILHAU/THIERRY" Type="0" CardType="ID" CardNo="140104197302090851" BirthDay="1973-02-09" CarrierPsgID="1" Country="CN" TicketNo=""/>
	</Passengers>
	<Flights>
		<Flight ElementNo="3" ID="1" Type="0" Carrier="CA" Flight="3100" BoardPoint="PEK" OffPoint="CAN" Week="3" DepartureDate="2005-12-12" DepartureTime="23:00" ArriveDate="2005-12-13" ArriveTime="08:00" Class="Y" ActionCode="RR" Seats="5" Aircraft="737" Meal="N" Stops="2" Avail="" Night="" ETKT="E" Changed="" LinkLevel="DS" Price="1999" Farebasis="YB" Tax1="CN50.00" Tax2="YQ40.00" Tax3="" Tax4="" GDS="" PNR=""/>
	</Flights>
	<Contacts>
		<!--联系信息
			ElementNo
			No				电话号码
			City			城市三字代码
			PsgID			旅客编号
			Text			文本信息
	-->
		<Contact ElementNo="5" No="0102134567" City="PEK" PsgID="1" Text=""/>
	</Contacts>
	<PNRs>
		<PNR ElementNo="7" No="DCWTTS" GDS="CA"/>
	</PNRs>
	<TKT ElementNo="9" Type="TL" TimeLimit="12:00" DateLimit="2005-12-12" Office="BJS888" Text="" PsgID=""/>
	<EI>NON-END NON-RER PEK03139/M2339B</EI>
	<TC>MU/Z03</TC>
	<FNs ElementNo="11" PsgID="0">
		<!--
            成人运价组
			Type			F:票面金额/S:现金收受/E:等值货币/C:代理费率/A:票价总额/X:税款合计/T:税款
			Currency		货币	CNY 人民币
			Value			值		
			ExtType			扩展类型,如果Type=T,则扩展类型表示税种
	-->
		<FN Type="F" Currency="CNY" Value="1010.00" ExtType=""/>
		<FN Type="S" Currency="CNY" Value="1010.00" ExtType=""/>
		<FN Type="C" Currency="" Value="3.00" ExtType=""/>
		<FN Type="X" Currency="CNY" Value="130.00" ExtType=""/>
		<FN Type="T" Currency="CNY" Value="50.00" ExtType="CN"/>
		<FN Type="T" Currency="CNY" Value="80.00" ExtType="YQ"/>
		<FN Type="A" Currency="CNY" Value="1140.00" ExtType=""/>
	</FNs>
	<InfFNs ElementNo="12" PsgID="0">
		<!--
            婴儿运价组
			Type			F:票面金额/S:现金收受/E:等值货币/C:代理费率/A:票价总额/X:税款合计/T:税款
			Currency		货币	CNY 人民币
			Value			值		
			ExtType			扩展类型,如果Type=T,则扩展类型表示税种
	-->
		<FN Type="F" Currency="CNY" Value="1010.00" ExtType=""/>
		<FN Type="S" Currency="CNY" Value="1010.00" ExtType=""/>
		<FN Type="C" Currency="" Value="0.00" ExtType=""/>
		<FN Type="X" Currency="CNY" Value="130.00" ExtType=""/>
		<FN Type="T" Currency="CNY" Value="50.00" ExtType="CN"/>
		<FN Type="T" Currency="CNY" Value="80.00" ExtType="YQ"/>
		<FN Type="A" Currency="CNY" Value="1140.00" ExtType=""/>
	</InfFNs>
	<TicketNos>
		<!--
			ElementNo		
			No				票号
			PsgID			对应的旅客序号	
            PsgType         旅客类型
			Remark			备注
	-->
		<TicketNo ElementNo="7" No="999-1234567890/99" PsgID="1" PsgType="" Remark=""/>
	</TicketNos>
	<Resp ElementNo="8" PNR="DFESE" Office="BJS888" CRS="" Remark=""/>
	<RMKs>
		<RMK ElementNo="9" Text="1W/DCWTTS"/>
	</RMKs>
	<SSRs>
		<SSR ElementNo="10" Type="TKNE" PsgID="1" Carrier="MH" ActionCode="HK" Seats="1" Text="P5348762/CN/14APR66"/>
	</SSRs>
	<OSIs>
		<OSI ElementNo="11" Type="PSPT" PsgID="1" Text="MH HK1 P5348762/CN/14APR66"/>
	</OSIs>
	<Segments>
		<Segment ElementNo="12" Type="FC" Text="CKG 3U CAN 350.00Y30 3U CKG 410.00Y35 CNY760.00END"/>
	</Segments>
</CRS.CommandSet.PNR>


拿到这个文件,首先将其转成成XSD。用到的工具为XSD.exe(这个是.net提供的一个工具)
命令为:
D:\Share>"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\xsd.exe" D:\Sh
are\CRS.CommandSet.PNR.2.0.xml
Microsoft(R) Xml 架构/数据类型支持实用工具
[Microsoft (R) .NET Framework, Version 2.0.50727.42]
Copyright (C) Microsoft Corporation. All rights reserved.
正在写入文件“D:\Share\CRS.CommandSet.PNR.2.0.xsd”。

说明执行成功,得到CRS.CommandSet.PNR.2.0.xsd文件,形式如下:


注:如果你没有安装.net,也是可以在线转换的,这里给个网址:http://www.freeformatter.com/xsd-generator.html

2、xsd生成java,用到的工具是jdk自带的。
D:\Share>C:\JavaDev\jdk1.6.0_02\bin\xjc.exe -p "abe" CRS.CommandSet.PNR.2.0.xsd
parsing a schema...
compiling a schema...
abe\CRSCommandSetPNR.java
abe\Contacts.java
abe\Item.java
abe\NewDataSet.java
abe\ObjectFactory.java

D:\Share>
此时已经生产相应的JAVA解释对象了。

3、调用。把abe整个包copy到项目中,写一个简单的转换方法unmarshal

	@SuppressWarnings("unchecked")
	public  static <T> T unmarshal(String xml,String encoding,Class<T> clazz) throws JAXBException, UnsupportedEncodingException{
		JAXBContext jaxbContext = JAXBContext.newInstance(clazz);  
        Unmarshaller um = jaxbContext.createUnmarshaller();  
        T res =  (T) um.unmarshal(new ByteArrayInputStream(xml.getBytes(encoding)));  
        return res;
	}


这样解释XML的工作就做好了。下面是调用方法:
	public static void main(String[] args) throws JAXBException, UnsupportedEncodingException
	{
         String xml="<?xml version='1.0' encoding='gb2312'?><CRS.CommandSet.PNR>...太长了,省略...</CRS.CommandSet.PNR>";
         
         CRSCommandSetPNR pnr =  unmarshal(xml,"gb2312",CRSCommandSetPNR.class);  
        
         System.out.println(String.format("小编码:%s,代理人office号:%s,飞行类型:%s", pnr.getPNR(),pnr.getAgentOffice(),pnr.getFlightType()));

	}


执行,得到结果:
小编码:E3FNK,代理人office号:BJS888,飞行类型:D


是不是很简单,因为是java,哈哈

分享到:
评论

相关推荐

    java或android xml转json所需jar包

    这是在android或者java中用xml传输数据时,用这个jar包一行代码即可把xml转成json,非常方便

    java导出excelxml.doc

    上述代码另存为一个xml或是xls文件,通过EXCEL打开,就可以看到直观的效果,其中的worksheet item就是我们所说的SHEET,table是我们的表格数据,只要按照此种格式生成一个文件,就OK了,这种方法比较简单可行,只是...

    前后端(java、xml、jsp、html)代码压缩

    需要将本地代码压缩成一行的

    java写的计算器

    用java GUI写的计算器程序。程序安全,健壮。多输几个小数点也只记录一个,和Windows XP 里的计算器(标准型),功能上是一样的。2+3=5,“2+3***”结果为5,不会连乘。“5*6==180”会连乘,2+3*8=40,2+3***8=...

    JAVA源码 代码一键自动生成工具

    代码一键自动生成工具 可生成Action、JavaBean实体类、Dao及实现类、service及实现类、spring.xml、struts.xml、mybatis.xml *该工具目前支持3种数据源的生成方式,分别是:JDBC、.table、PDM *JDBC:选择JDBC是只...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    我们在第一行后面插入下面代码就可以: &lt;!DOCTYPE myfile [ &lt;!ELEMENT title (#PCDATA)&gt; &lt;!ELEMENT author (#PCDATA)&gt; &lt;!ENTITY copyright "Copyright 2001, Ajie."&gt; ]&gt; 2.调用独立的DTD文件 将DTD文档存为....

    写的一个简单的代码生成器

    1.POJO类,类的hibernate映射文件,DAO类,Manager类,spring的对hibernate封装的配置文件,如果你不使用webwork,只需要这些就行了 2.webwork的Action类,Action的资源文件,Action的校验文件,xwork.xml, 模板支持...

    xml入门教程/xml入门教程

    1.第一行一定要写&lt;?xml verson="1.0"?&gt; 2.xml文件是由元素和元素的内容以及属性组成的,一个xml文件中只能有一个根元素,标签和标签的内容加在一起叫作一个元素。xml是大小写 敏感的,只能以字母或下划线开头。 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    代码空白、注释、有效行数统计程序支持java、jsp、xml,并实时更新统计结果

    统计代码有效行数、注释行数、空白行数。支持java,jsp,xml一种或多种同时统计,可统计具体文件和文件夹下所有文件,统计结果实时更新显示,界面友好,操作简便。

    java jdk实列宝典 光盘源代码

    多种方式写文件内容, 按字节写文件内容、按字符写文件内容、按行写文件内容 ; 添加内容到文件结尾;文件的分割和合并;使用StreamTokenizer统计文件的字符数; 序列化和反序列化对象(将不长用的对象暂时持久化到...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    基于Java的XML解析与反射设计模式.doc

    xstream是一种序列 化工具而不是数据绑定工具,就是说不能从xml或者xml schema definition (xsd)文件生成类。 和其他序列化工具相比,xstream 有三个突出的特点: xstream不关心序列化/逆序列化的类的字段的可见性...

    Eclipse的template.xml

    Eclipse一般常用的可以导入两处 *.xml 格式的模板,一个是常用的注释格式模板,另一个是代码格式化时用的模板,导入方法如下: 假设: 1.xml 是代码注释格式模板 2.xml 是代码格式化时的自定义模板 导入方式:...

    day023-xml解析笔记和代码.rar

    第一行用了定义xml文件的,写版本号和字符集 1.注释不能放到第一行 1.必需有声明,声明必需在第一行。 2.文档声明的字符编码必需和文档本身的编码一致 2.标签不能交叉嵌套使用(标签名字随便...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    dom4j-1.6.1 xml开发利器

    dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面还可以...

    java 面试题 总结

    java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 3、int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或内置...

Global site tag (gtag.js) - Google Analytics