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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

xstream,节点属性起别名时这样的问题你遇到过吗

發布時間:2025/3/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 xstream,节点属性起别名时这样的问题你遇到过吗 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先這是我自己定義的一個xstream,這個xstream是為了在處理xml時能夠加上<![CDATA[------]]>而特別重寫的。這個xstream是沒有任何問題的。


private static XStream xstream = new XStream(new XppDriver() {public HierarchicalStreamWriter createWriter(Writer out) {return new PrettyPrintWriter(out) {boolean cdata = true;@SuppressWarnings("rawtypes")public void startNode(String name, Class clazz) {super.startNode(name, clazz);}protected void writeText(QuickWriter writer, String text) {if (cdata) {writer.write("<![CDATA[");writer.write(text);writer.write("]]>");} else {writer.write(text);}}};}});

然后是我們要轉換為xml文件的類,這里我實現了一個basemessage,用來包含所有消息都包含著的通用屬性字段。然后實現了一個textmessage來專門處理文本消息,textmessage是集成了basemessage的。代碼如下;

public class BaseMessage {private String ToUserName;private String FromUserName;private long CreateTime;private String MsgType;public String getToUserName() {return ToUserName;}public void setToUserName(String toUserName) {ToUserName = toUserName;}public String getFromUserName() {return FromUserName;}public void setFromUserName(String fromUserName) {FromUserName = fromUserName;}public long getCreateTime() {return CreateTime;}public void setCreateTime(long createTime) {CreateTime = createTime;}public String getMsgType() {return MsgType;}public void setMsgType(String msgType) {MsgType = msgType;}}

public class TextMessage extends BaseMessage {private String Content;public String getContent() {return Content;}public void setContent(String content) {this.Content = content;}}
然后用xstream做如下的測試:

public static void main(String[] args) throws Exception {TextMessage message = new TextMessage();message.setFromUserName("1");message.setToUserName("2");message.setCreateTime(System.currentTimeMillis());message.setMsgType("art");message.setContent("133");xstream.alias("xml", message.getClass());// 這里指定TextMessage中的ToUserName變為屬性xstream.useAttributeFor(TextMessage.class, "ToUserName");// 指定TextMessage中的Content變為屬性,別名為c_cxstream.aliasAttribute(TextMessage.class, "Content", "c_c");// 指定TextMessage中的MsgType變為屬性,別名為mtypexstream.aliasAttribute(TextMessage.class, "MsgType", "mtype");// 指定BaseMessage中的FromUserName變為屬性,別名為ffxstream.aliasAttribute(BaseMessage.class, "FromUserName", "ff");String result = xstream.toXML(message);System.out.println(result);// StringReader readers = new StringReader(result);// InputSource inputSource = new InputSource(readers);// SAXReader reader = new SAXReader();// Document document = null;// document = reader.read(inputSource);// Map<String, String> map = new HashMap<String, String>();// Element root = document.getRootElement();// System.out.println(root.attributeValue("ff"));// List<Element> elements = root.elements();// for (Element e : elements) {// System.out.println(e.getName() + "------" + e.getText() + "---");// }}

運行程序后得到結果如下:

<xml ToUserName="2" ff="1" MsgType="art" c__c="133"><CreateTime><![CDATA[1447310176809]]></CreateTime> </xml>

分析結果,我們可以看到如下的現象:1.指定TextMessage中的ToUserName變為屬性是成功的。2.指定TextMessage中的Content變為屬性,別名為c_c是成功的,而// 指定TextMessage中的MsgType變為屬性,別名為mtype則只做到了將MsgType變成了屬性,卻沒有起別名。3.指定BaseMessage中的FromUserName變為屬性,別名為ff是成功的。

通過上邊這些現象,我是不是可以這樣理解?一個類從另一個類中集成了某些屬性的時候,通過這個類來為繼承的屬性器別名是不行的,而通過基類為這個繼承的屬性來起別名就可以。然而如果不起別名,那么可以通過useAttributeFor來將繼承的字段指定為xml文件的屬性呢?實際測試是這樣的。

總結

以上是生活随笔為你收集整理的xstream,节点属性起别名时这样的问题你遇到过吗的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。