javascript
java 转xml 变成两根下划线_XStream实现xml和java对象之间的互相转换(包括对属性,别名,下划线_的处理),同理JSON也可以...
首先去官網下載響應JAR包
最少需要兩個jar包,一個xstream.jar,一個是xmlpull.jar
首先來看下java對象到xml的轉換
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;
}
}
以上是一個普通的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());
}
}
以上代碼,先是生成一個對象,給各個屬性賦值,然后調用toXML將對象轉換為xml格式的普通文本,注意在轉換前調用了alias目的是為了將xml.Person重命名為person
<?xml version="1.0" ?>chiwei2618867101080
這里xstream實例化時候傳入了StaxDriver表示A driver using the StAX API to create XML reader and writer.
如果你使用xpp3driver,你需要引入該jar包
后面則根據上面轉換后的xml繼續轉換成相應的對象Person
<?xml version="1.0" ?>chiwei2618867101080
chiwei
很簡單
xs.alias("person",Person.class);
xs.useAttributeFor(Person.class,"username");
xs.aliasAttribute(Person.class,"username","name");這種情況是將屬性寫到XML元素的里面作為屬性,而不是單獨作為一個子元素,如下所示:
26
-------------------------------------------------------------------------------華麗的分割線-------------------------------------------------------------------------------------------
以上的例子的確很簡單,下面看看一些別的處理
xs.aliasField("res_type",SLIR.class,"resType");該方法是用于將SLIR類中的resType屬性在XML元素中顯示為res_type,這里看到有一個下劃線_,其實在xstream實例化的時候,如果沒有用到XmlFriendlyNameCoder的話,可能下劃線_就會變成__,因為在這里_其實是轉移符,所以我們實例化xstream的時候應該如下:
private static XStream xs = new XStream(new DomDriver(null,new XmlFriendlyNameCoder("_-","_")));
xs.useAttributeFor(RequestMode.class,"type");該方法的目的是將RequestMode類中的type屬性作為該XML元素的內部屬性
最后再來看下,XML元素同時又屬性和值得時候怎么處理
13505602768如上所示,msid元素擁有兩個屬性,同時又擁有自己的值,這時候,在做轉化的時候,必須自定義轉換器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;
}
}定義完該轉換器后,將其注冊到xstream上即可
xs.registerConverter(new ReqMsidConverter());
總結
如果覺得編程之家網站內容還不錯,歡迎將編程之家網站推薦給程序員好友。
本圖文內容來源于網友網絡收集整理提供,作為學習參考使用,版權屬于原作者。
如您喜歡交流學習經驗,點擊鏈接加入交流1群:1065694478(已滿)交流2群:163560250
總結
以上是生活随笔為你收集整理的java 转xml 变成两根下划线_XStream实现xml和java对象之间的互相转换(包括对属性,别名,下划线_的处理),同理JSON也可以...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 古代文化(中国传统文化常识大全)
- 下一篇: java装饰模式模拟流_Java 装饰模