XStream

(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;
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值