日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

java 转xml 变成两根下划线_XStream实现xml和java对象之间的互相转换(包括对属性,别名,下划线_的处理),同理JSON也可以...

發(fā)布時(shí)間:2024/9/19 javascript 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 转xml 变成两根下划线_XStream实现xml和java对象之间的互相转换(包括对属性,别名,下划线_的处理),同理JSON也可以... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

首先去官網(wǎng)下載響應(yīng)JAR包

最少需要兩個(gè)jar包,一個(gè)xstream.jar,一個(gè)是xmlpull.jar

首先來看下java對象到xml的轉(zhuǎn)換

package xml;

class PhoneNumber {

private int code;

private int number;

public int getCode() {

return code;

}

public void setCode(int code) {

this.code = code;

}

public int getNumber() {

return number;

}

public void setNumber(int number) {

this.number = number;

}

}

public class Person {

private String username;

private int age;

private PhoneNumber pn;

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public PhoneNumber getPn() {

return pn;

}

public void setPn(PhoneNumber pn) {

this.pn = pn;

}

}

以上是一個(gè)普通的java對象

package xml;

import com.thoughtworks.xstream.XStream;

import com.thoughtworks.xstream.io.xml.StaxDriver;

public class XmlUtils {

private static XStream xs = new XStream(new StaxDriver());

public static String objToXml(Object obj) {

//xs.aliasPackage(name,pkgName);

return xs.toXML(obj);

}

public static void main(String[] args) {

Person p = new Person();

p.setAge(26);

p.setUsername("chiwei");

PhoneNumber pn = new PhoneNumber();

pn.setCode(188);

pn.setNumber(67101080);

p.setPn(pn);

xs.alias("person",Person.class);

String xml = objToXml(p);

Person per = (Person)xs.fromXML(xml);

System.out.println(xml);

System.out.println(per.getUsername());

}

}

以上代碼,先是生成一個(gè)對象,給各個(gè)屬性賦值,然后調(diào)用toXML將對象轉(zhuǎn)換為xml格式的普通文本,注意在轉(zhuǎn)換前調(diào)用了alias目的是為了將xml.Person重命名為person

<?xml version="1.0" ?>chiwei2618867101080

這里xstream實(shí)例化時(shí)候傳入了StaxDriver表示A driver using the StAX API to create XML reader and writer.

如果你使用xpp3driver,你需要引入該jar包

后面則根據(jù)上面轉(zhuǎn)換后的xml繼續(xù)轉(zhuǎn)換成相應(yīng)的對象Person

<?xml version="1.0" ?>chiwei2618867101080

chiwei

很簡單

xs.alias("person",Person.class);

xs.useAttributeFor(Person.class,"username");

xs.aliasAttribute(Person.class,"username","name");這種情況是將屬性寫到XML元素的里面作為屬性,而不是單獨(dú)作為一個(gè)子元素,如下所示:

26

-------------------------------------------------------------------------------華麗的分割線-------------------------------------------------------------------------------------------

以上的例子的確很簡單,下面看看一些別的處理

xs.aliasField("res_type",SLIR.class,"resType");該方法是用于將SLIR類中的resType屬性在XML元素中顯示為res_type,這里看到有一個(gè)下劃線_,其實(shí)在xstream實(shí)例化的時(shí)候,如果沒有用到XmlFriendlyNameCoder的話,可能下劃線_就會(huì)變成__,因?yàn)樵谶@里_其實(shí)是轉(zhuǎn)移符,所以我們實(shí)例化xstream的時(shí)候應(yīng)該如下:

private static XStream xs = new XStream(new DomDriver(null,new XmlFriendlyNameCoder("_-","_")));

xs.useAttributeFor(RequestMode.class,"type");該方法的目的是將RequestMode類中的type屬性作為該XML元素的內(nèi)部屬性

最后再來看下,XML元素同時(shí)又屬性和值得時(shí)候怎么處理

13505602768如上所示,msid元素?fù)碛袃蓚€(gè)屬性,同時(shí)又擁有自己的值,這時(shí)候,在做轉(zhuǎn)化的時(shí)候,必須自定義轉(zhuǎn)換器converter才行

import com.thoughtworks.xstream.converters.Converter;

import com.thoughtworks.xstream.converters.MarshallingContext;

import com.thoughtworks.xstream.converters.UnmarshallingContext;

import com.thoughtworks.xstream.io.HierarchicalStreamReader;

import com.thoughtworks.xstream.io.HierarchicalStreamWriter;

public class ReqMsidConverter implements Converter {

@SuppressWarnings("rawtypes")

@Override

public boolean canConvert(Class type) {

// TODO Auto-generated method stub

return type.equals(Msid.class);

}

@Override

public void marshal(Object source,HierarchicalStreamWriter writer,MarshallingContext context) {

// TODO Auto-generated method stub

Msid msid = (Msid)source;

writer.addAttribute("enc",msid.getEnc());

writer.addAttribute("type",msid.getType());

writer.setValue(msid.getMsid());

}

@Override

public Object unmarshal(HierarchicalStreamReader reader,UnmarshallingContext context) {

// TODO Auto-generated method stub\

Msid msid = new Msid();

msid.setEnc(reader.getAttribute("enc"));

msid.setType(reader.getAttribute("type"));

msid.setMsid(reader.getValue());

return msid;

}

}定義完該轉(zhuǎn)換器后,將其注冊到xstream上即可

xs.registerConverter(new ReqMsidConverter());

總結(jié)

如果覺得編程之家網(wǎng)站內(nèi)容還不錯(cuò),歡迎將編程之家網(wǎng)站推薦給程序員好友。

本圖文內(nèi)容來源于網(wǎng)友網(wǎng)絡(luò)收集整理提供,作為學(xué)習(xí)參考使用,版權(quán)屬于原作者。

如您喜歡交流學(xué)習(xí)經(jīng)驗(yàn),點(diǎn)擊鏈接加入交流1群:1065694478(已滿)交流2群:163560250

總結(jié)

以上是生活随笔為你收集整理的java 转xml 变成两根下划线_XStream实现xml和java对象之间的互相转换(包括对属性,别名,下划线_的处理),同理JSON也可以...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。