(1)配置XML节点既有属性又有内容
参考:http://www.douban.com/note/240686392/
例如XML节点为这样的, 如何通过XStream来映射JavaBean呢?
<node att="value">text</node>
在Stack Overflow上找到了解答, you can use a predefined Converter.
Field as Text Value
@XStreamAlias("node")
@XStreamConverter(value=ToAttributedValueConverter.class, strings={"text"})
public class Node {
private String att;
private String text;
}
//eg.
private static String xmppString = "<?xml version='1.0' encoding='utf-8' ?>" +
"<iq>" +
"<milk xmlns=\"mk:client:chat\" userid=\"p85\" ttg=\"0\" target=\"p61\" sendtime=\"2014-11-24 13:30:45\" suffix=\"\" type=\"1\">90</milk>" +
"</iq>";
XStream xstream = new XStream(new DomDriver ());
//
xstream.processAnnotations(XMPPIqInfo.class);
XMPPIqInfo xMPPIqInfo = (XMPPIqInfo) xstream.fromXML(xmppString);
System.out.println("-------------------");
System.out.println(xMPPIqInfo.getMilk().getSendtime());
System.out.println(xMPPIqInfo.getMilk().getText());
//
@XStreamAlias("iq")
class XMPPIqInfo implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private MilkInfo milk;
public MilkInfo getMilk() {
return milk;
}
public void setMilk(MilkInfo milk) {
this.milk = milk;
}
}
@XStreamAlias("milk ")
@XStreamConverter(value = ToAttributedValueConverter.class, strings = { "text" })
class MilkInfo implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@XStreamAsAttribute
private String xmlns;
@XStreamAsAttribute
private String userid;
@XStreamAsAttribute
private String ttg;
@XStreamAsAttribute
private String target;
@XStreamAsAttribute
private String sendtime;
@XStreamAsAttribute
private String suffix;
@XStreamAsAttribute
private String type;
private String text;
public String getXmlns() {
return xmlns;
}
public void setXmlns(String xmlns) {
this.xmlns = xmlns;
}
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getTtg() {
return ttg;
}
public void setTtg(String ttg) {
this.ttg = ttg;
}
public String getTarget() {
return target;
}
public void setTarget(String target) {
this.target = target;
}
public String getSendtime() {
return sendtime;
}
public void setSendtime(String sendtime) {
this.sendtime = sendtime;
}
public String getSuffix() {
return suffix;
}
public void setSuffix(String suffix) {
this.suffix = suffix;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
//
(2)解析集合
<items>
<item title="品牌" id="1" pid="0">
<subitem content="旅行社" pid="1" id="2"/>
<subitem content="景点" pid="1" id="3"/>
<subitem content="酒店" pid="1" id="4"/>
<subitem content="航空" pid="1" id="5"/>
<subitem content="旅游城市" pid="1" id="6"/>
</item>
<item title="文化" id="7" pid="0">
<subitem content="文艺" pid="7" id="8"/>
<subitem content="服装 " pid="7" id="9"/>
<subitem content="摄影" pid="7" id="10"/>
<subitem content="设计" pid="7" id="11"/>
<subitem content="明星" pid="7" id="12"/>
</item>
</items>
@XStreamAlias("items")
public class XML_RightMenuInfo implements Serializable{
private static final long serialVersionUID = -4942613159612187126L;
//@XStreamAlias("item")
@XStreamImplicit(itemFieldName="item")//这句话是关键
private List<XML_RightMenu_Item> item;
public List<XML_RightMenu_Item> getItem() {
return item;
}
public void setItem(List<XML_RightMenu_Item> item) {
this.item = item;
}
}
@XStreamAlias("item")
class XML_RightMenu_Item implements Serializable{
private static final long serialVersionUID = -4942613159612187126L;
@XStreamAsAttribute
private String title;
@XStreamAsAttribute
private String id;
@XStreamAsAttribute
private String pid;
//@XStreamAlias("subitem")
@XStreamImplicit(itemFieldName="subitem")//这句话是关键
private List<XML_RightMenu_Subitem> subitem;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public List<XML_RightMenu_Subitem> getSubitem() {
return subitem;
}
public void setSubitem(List<XML_RightMenu_Subitem> subitem) {
this.subitem = subitem;
}
}
@XStreamAlias("subitem")
class XML_RightMenu_Subitem implements Serializable{
private static final long serialVersionUID = -4942613159612187126L;
@XStreamAsAttribute
private String content;
@XStreamAsAttribute
private String pid;
@XStreamAsAttribute
private String id;
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}