不写一行代码,也能解释XML,因为是JAVA
生活随笔
收集整理的這篇文章主要介紹了
不写一行代码,也能解释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文件,形式如下:
[img]http://dl.iteye.com/upload/picture/pic/120310/2eab46de-f874-3800-aac2-405d10e7f3b5.png[/img]
注:如果你沒有安裝.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,哈哈
整個過程就三個步驟
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文件,形式如下:
[img]http://dl.iteye.com/upload/picture/pic/120310/2eab46de-f874-3800-aac2-405d10e7f3b5.png[/img]
注:如果你沒有安裝.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,哈哈
總結
以上是生活随笔為你收集整理的不写一行代码,也能解释XML,因为是JAVA的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最赏识王小川的,还是马化腾
- 下一篇: 二进制位运算 左移与右移