Java - Make XML Format Data by jdom API

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

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

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

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

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

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

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

格式說明如下:

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

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

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

XMLOutputter fmt = new XMLOutputter();
Format format = Format.getPrettyFormat();
Element root = new Element("Information");
Element tag = null;
Document xmldoc = new Document(root);
for(int i = 0 ; i < xmltag.length ; i++){
String xmltags[] = xmltag[i].split("_");
    //1. create => <tag attr1="ooxx" attr2="ooxx">ooxx</tag>
 if(xmltags.length > 1){ 
  if(tag == null){
   tag = new Element(xmltags[0]);
   root.addContent(tag);
   tag.setAttribute(xmltags[1], xmlval[i]);
  }else{
   if(xmltags[1].equals("text")){
    //針對最後一個屬性來處理value值透過逗點可能需產生多筆tag
    String pays[] = xmlval[i].split(",");
    for(int j = 0 ; j < pays.length ; j++){
     if(j != 0){
      tag = new Element(xmltags[0]);
      root.addContent(tag);
     } 
     tag.setAttribute("type", xmlval[3].split(",")[j]);
     tag.setAttribute("amt",  xmlval[4].split(",")[j]);
     tag.addContent(pays[j]);
    }
    tag = null; //指向null,清掉該變數記錄的address
   }else
    tag.setAttribute(xmltags[1], xmlval[i]);
  } 
 }else{ //2. create => <tag>ooxx</tag>
  tag = new Element(xmltags[0]);
  tag.addContent(xmlval[i]);
  root.addContent(tag);
  tag = null; //指向null,清掉該變數記錄的address
 }
}

定義出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及檔案

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



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

參考,純粹範例使用!

留言