??????? 当我们从数据库中查询出很多个对象类型时,我们一般都存放在List中。像这种数据就很难用拼接字符串的形式进行传递。我的解决办法就是利用dom4j把它写成一个xml格式的字符串,然后在客户端再利用dom4j解释。
???? ?? 假如我们从数据库中查询的是一个Student对象,该对象有name和agel两个属性,我们将大量的Student对象储存在List中。下面我们想利用dom4j把List数据变成如下格式的xml文件类型的字符串:
[xhtml:showcolumns:firstline[1]]
view plain
copy
print
?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
- <?xml?version="1.0"?encoding="UTF-8"?>??
-
??????<root>??
-
??????????<student>??
-
??????????????<name>张三</name>??
-
??????????????<age>26</age>??
-
??????????</student>??
-
??????????<student>??
-
??????????????<name>赵四</name>??
-
??????????????<age>34</age>??
-
??????????</student>??
-
??????</root>??


webservice端java代码如下:
[java:showcolumns:firstline[1]]
view plain
copy
print
?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
- import?java.util.List;??
-
import?org.dom4j.Document;??
-
import?org.dom4j.DocumentHelper;??
-
import?org.dom4j.Element;??
-
import?org.dom4j.io.OutputFormat;??
-
import?vo.UnitPO;??
-
import?DAO.unitDao;??
-
public?class?Service02?{?????
-
????public?String?method(){??
- ?????????
- ????????Document?document?=?DocumentHelper.createDocument();??
-
????????Element?root?=?document.addElement("root");??
- ?????????
-
????????Element?stuElement?=?null;??
-
????????Element?nameElement?=?null;??
-
????????Element?ageElement?=?null;??
- ?????????
-
??????????
-
????????stuElement?=?root.addElement("student");??
-
??????????
-
????????nameElement?=?stuElement.addElement("name");??
-
????????ageElement?=?stuElement.addElement("age");?????
-
???????? ??
-
????????nameElement.addText("张三");??
-
????????ageElement.addText("26");??
- ?????????
-
???????? ??
-
????????stuElement?=?root.addElement("student");?????????
-
????????nameElement?=?stuElement.addElement("name");??
-
????????ageElement?=?stuElement.addElement("age");?????
-
????????nameElement.addText("赵四");??
-
????????ageElement.addText("34");??
-
????????try?{??
- ????????????OutputFormat?format?=?OutputFormat.createPrettyPrint();??
-
???????????? ??
-
????????????format.setEncoding("UTF-8");??
-
????????????return?document.asXML();??
-
????????}?catch?(Exception?e)?{??
- ????????????System.out.println(e.getMessage());??
-
????????????return?"error";??
- ????????}??
- ????}??
- }??
?
??? ? ? 这样就将我们想传送的复杂数据变成了xml格式是字符串,下面在客户端就可以解释出我们想要的数据了。
client端java代码如下:
[java:showcolumns:firstline[1]]
view plain
copy
print
?
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
- import?java.io.StringReader;??
-
import?java.util.List;??
-
import?org.dom4j.Document;??
-
import?org.dom4j.Element;??
-
import?org.dom4j.io.SAXReader;??
-
import?webservice.Service02Proxy;??
-
public?class?Test?{??
-
????public?static?void?main(String[]?args)?{?????????
-
????????try{??
-
??????????????
-
????????????Service02Proxy?proxy?=?new?Service02Proxy();??
-
??????????????
- ????????????String?str?=?proxy.method();??
-
??????????????
-
????????????StringReader?read?=?new?StringReader(str);??
-
????????????SAXReader?reader?=?new?SAXReader();??
- ????????????Document?doc?=?reader.read(read);???
- ????????????Element?root?=?doc.getRootElement();??
-
??????????????
-
????????????List?list?=?root.elements("student");???
- ?????????????
-
????????????for(int?i?=?0;i?<?list.size();i++){??
- ?????????????????
- ????????????????Element?student?=?(Element)list.get(i);??
-
????????????????Element?name?=?student.element("name");??
-
????????????????Element?age?=?student.element("age");??
- ?????????????????
-
??????????????????
-
????????????????System.out.println(name.getTextTrim()+":"+age.getTextTrim());??
- ?????????????????
- ????????????}??
- ?????
-
????????}catch(Exception?e){??
- ?????????????
- ????????????e.printStackTrace();??
- ?????????????
- ????????}??
- ????}??
- }??
控制台输出为:
?????????????????? 张三:26
?????????????????? 赵四:34
?????? 每种编程语言可能接受时用的类型不同,但方法大同小异。代码如有问题,欢迎给予评价。