WebService在傳遞資料的時候隻能傳遞字元串,當我們傳回一些簡單的字元串時我們可以直接傳回,但是當我們想傳回比如List,Map等複雜類型的資料時拼接字元串就是個很麻煩的工作,這時我們就用到了dom4j這個工具。
當我們從資料庫中查詢出很多個對象類型時,我們一般都存放在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>
<?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;
- //第一個student節點
- stuElement = root.addElement("student");
- //添加兩個子節點
- nameElement = stuElement.addElement("name");
- ageElement = stuElement.addElement("age");
- //向兩個子節點中添加文本内容
- nameElement.addText("張三");
- ageElement.addText("26");
- //同理第二個student節點
- stuElement = root.addElement("student");
- nameElement = stuElement.addElement("name");
- ageElement = stuElement.addElement("age");
- nameElement.addText("趙四");
- ageElement.addText("34");
- try {
- OutputFormat format = OutputFormat.createPrettyPrint();
- // 設定XML檔案的編碼格式
- format.setEncoding("UTF-8");
- return document.asXML();
- } catch (Exception e) {
- System.out.println(e.getMessage());
- return "error";
- }
- }
- }
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;
//第一個student節點
stuElement = root.addElement("student");
//添加兩個子節點
nameElement = stuElement.addElement("name");
ageElement = stuElement.addElement("age");
//向兩個子節點中添加文本内容
nameElement.addText("張三");
ageElement.addText("26");
//同理第二個student節點
stuElement = root.addElement("student");
nameElement = stuElement.addElement("name");
ageElement = stuElement.addElement("age");
nameElement.addText("趙四");
ageElement.addText("34");
try {
OutputFormat format = OutputFormat.createPrettyPrint();
// 設定XML檔案的編碼格式
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();
- //接受傳過來的XML字元串
- String str = proxy.method();
- //解釋該字元串
- StringReader read = new StringReader(str);
- SAXReader reader = new SAXReader();
- Document doc = reader.read(read);
- Element root = doc.getRootElement();
- //該節點由多個student構成,是以傳回值是List類型
- 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();
- }
- }
- }
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();
//接受傳過來的XML字元串
String str = proxy.method();
//解釋該字元串
StringReader read = new StringReader(str);
SAXReader reader = new SAXReader();
Document doc = reader.read(read);
Element root = doc.getRootElement();
//該節點由多個student構成,是以傳回值是List類型
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
每種程式設計語言可能接受時用的類型不同,但方法大同小異。代碼如有問題,歡迎給予評價。