在利用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());
}
}
}