利用dom4j來生成xml檔案

lanchengxiaoxiao發表於2012-04-12

在利用dom4j來生成xml檔案的時候,當然需要先將dom4j的包引進來,好的是在hibernate的lib下自帶了一個dom4j,也可以利用過來,

如果要生成這樣的xml檔案:

<?xml version="1.0" encoding="UTF-8"?>
<SubOutGateInfo>
 <ShipSideName>NPEDI</ShipSideName>
 <GateName>1</GateName>
 <ChannelCode>1</ChannelCode>
 <TruckCode>ZJB-XXXXX</TruckCode>
 <SubOutGateContainer1>
  <ContainerNo>CBHU9867210</ContainerNo>
  <IEFlag>I</IEFlag>
  <ContainerEmptyFlag>E</ContainerEmptyFlag>
  <ContainerType>CP</ContainerType>
  <TradeType>w</TradeType>
 </SubOutGateContainer1>
 <SubOutGateContainer2>
  <ContainerNo></ContainerNo>
  <IEFlag></IEFlag>
  <ContainerEmptyFlag></ContainerEmptyFlag>
  <ContainerType></ContainerType>
  <TradeType></TradeType>
 </SubOutGateContainer2>
</SubOutGateInfo>

該如何利用dom4j生成呢(當然也可以不利用dom4j生成xml檔案,這裡只是記錄dom4j生成xml檔案的用法)?下述程式碼將在F盤生成一個名為“text.xml”的xml檔案.

import java.io.FileWriter;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;

public class Test {

 public static void main(String[] args) throws Exception {
  Document document = DocumentHelper.createDocument();
  /**
   * 新建一個根標記<SubOutGateInfo></SubOutGateInfo>
   */
  Element root = document.addElement("SubOutGateInfo");
  /**
   * 在根標記下建立一個子標記<ShipSideName></ShipSideName>
   * 並利用setText(String str)方法為其標記設定了一個值"NPEDI"
   * 此時xml檔案為:
   * <SubOutGateInfo>
   *   <ShipSideName>NPEDI</ShipSideName>
   * </SubOutGateInfo>
   */
  root.addElement("ShipSideName").setText("NPEDI");
  /**
   * 在根標記下建立一個子標記<GateName></GateName>
   * 原理同上用setText(String str)方法為起標記設定一個值"1"
   * 此時xml檔案為:
   *<SubOutGateInfo>
   *   <ShipSideName>NPEDI</ShipSideName>
   *   <GateName>1</GateName>
   * </SubOutGateInfo>
   * 下面的用法基本雷同,不在贅述.
   */
  root.addElement("GateName").setText("1");
  root.addElement("ChannelCode").setText("1");
  root.addElement("TruckCode").setText("ZJB-XXXXX");
  root.addElement("SubOutGateContainer1");
 
  Element subOutGetContainer1 = root.element("SubOutGateContainer1");
  subOutGetContainer1.addElement("ContainerNo").setText("CBHU9867210");
  subOutGetContainer1.addElement("IEFlag").setText("I");
  subOutGetContainer1.addElement("ContainerEmptyFlag").setText("E");
  subOutGetContainer1.addElement("ContainerType").setText("CP");
  subOutGetContainer1.addElement("TradeType").setText("w");
 
  root.addElement("SubOutGateContainer2");
  Element subOutGetContainer2 = root.element("SubOutGateContainer2");
  subOutGetContainer2.addElement("ContainerNo").setText("");
  subOutGetContainer2.addElement("IEFlag").setText("");
  subOutGetContainer2.addElement("ContainerEmptyFlag").setText("");
  subOutGetContainer2.addElement("ContainerType").setText("");
  subOutGetContainer2.addElement("TradeType").setText("");
 
  //在終端列印出生成的xml檔案
  System.out.println(document.asXML());
  //將生成的xml檔案儲存在"F:/text.xml"檔案中
  FileWriter fw = new FileWriter("F:/text.xml");
  fw.write(document.asXML());
  fw.flush();
  fw.close();
  //讀取標籤名為<ShipSideName>的值
  String shipSideNameValue = root.element("ShipSideName").getText();
  System.out.println(shipSideNameValue);
 
  //獲取根標籤下的所有子標籤
  List<Node> elements = (List<Node>)root.elements();
  Iterator<Node> it = elements.iterator();
  while(it.hasNext()){
   System.out.println(it.next().getName());
  }
 
 }

}


相關文章