Java - Make XML Format Data by jdom API

在做網頁之間的資料傳輸做交換時,通常會透過XML、JSON來定義資料格式。關於這兩個的

使用方法與定義在此不多做說明。

今天要提到的部分為XML資料的組成,由於最近有處理到一件事,需要將從資料庫撈出來

的資料組成XML資料POST到一Web Service做匯入的動作!因此,在這邊提到如何利用外部

Library jdom API來組成XML,並輸出檔案!

首先,來定義資料的標籤與對應的值,如下:

  1. String xmltag[] = {"app_id", "title", "date", "pay_type", "pay_amt", "pay_text"};
  2. String xmlval[] = {"103001001", "主題1", "103-12-29", "1,2", "800,1200", "方案一:擁有OOXX,方案二:擁有XXOO"};

格式說明如下:

1. 一個名稱對應一個值,如<title>主題1</title>

2. 若搭配一底線則為標籤對應屬性名稱,如<app id="103001001"/>

接著,為組成XML的資料處理過程如下:

  1. XMLOutputter fmt = new XMLOutputter();
  2. Format format = Format.getPrettyFormat();
  3. Element root = new Element("Information");
  4. Element tag = null;
  5. Document xmldoc = new Document(root);
  6. for(int i = 0 ; i < xmltag.length ; i++){
  7. String xmltags[] = xmltag[i].split("_");
  8. //1. create => <tag attr1="ooxx" attr2="ooxx">ooxx</tag>
  9. if(xmltags.length > 1){
  10. if(tag == null){
  11. tag = new Element(xmltags[0]);
  12. root.addContent(tag);
  13. tag.setAttribute(xmltags[1], xmlval[i]);
  14. }else{
  15. if(xmltags[1].equals("text")){
  16. //針對最後一個屬性來處理value值透過逗點可能需產生多筆tag
  17. String pays[] = xmlval[i].split(",");
  18. for(int j = 0 ; j < pays.length ; j++){
  19. if(j != 0){
  20. tag = new Element(xmltags[0]);
  21. root.addContent(tag);
  22. }
  23. tag.setAttribute("type", xmlval[3].split(",")[j]);
  24. tag.setAttribute("amt", xmlval[4].split(",")[j]);
  25. tag.addContent(pays[j]);
  26. }
  27. tag = null; //指向null,清掉該變數記錄的address
  28. }else
  29. tag.setAttribute(xmltags[1], xmlval[i]);
  30. }
  31. }else{ //2. create => <tag>ooxx</tag>
  32. tag = new Element(xmltags[0]);
  33. tag.addContent(xmlval[i]);
  34. root.addContent(tag);
  35. tag = null; //指向null,清掉該變數記錄的address
  36. }
  37. }

定義出Document object,並且產生root's element,如此一來透過addContent一步一步的加進

下層的element。

1. 建立有屬性的標籤樣式,並且在set最後一個屬性的value時,同步檢查該標籤是

否需建立多筆資料,由value以逗點隔開來區別,如下:

<pay type="1" amt="800">方案一:擁有OOXX</pay>
<pay type="2" amt="1200">方案二:擁有XXOO</pay>

2. 建立無屬性的標籤,這個部分就很單純,在此不多做說明,產生樣式如下:

<title>主題1</title>

再來,輸出XML Data及檔案

  1. //3. show xml data
  2. fmt.setFormat(format.setEncoding("utf-8"));
  3. //印出資料
  4. System.out.println(fmt.outputString(xmldoc));
  5. //輸出資料
  6. FileWriter fw = new FileWriter("output.xml");
  7. fmt.output(xmldoc, fw);
  8. fw.close();



大致上會使用到的基本功能如上所示,關於資料格式定義,在此以兩個陣列做表示,僅供

參考,純粹範例使用!

留言