Article Directory
Xml file and generate the DOM method code XStream summary
Preview the results:
1, DOM way
public static void test1(){
try {
// 创建解析器工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder db = factory.newDocumentBuilder();
Document document = db.newDocument();
// 不显示standalone="no"
document.setXmlStandalone(true);
Element message = document.createElement("MESSAGE");
Element messageHead = document.createElement("MESSAGE_HEAD");
Element messageBody = document.createElement("MESSAGE_BODY");
//MESSAGE_HEAD
Element HEAD_1 = document.createElement("KEY_NO");
Element HEAD_2 = document.createElement("MESSAGE_TYPE");
Element HEAD_3 = document.createElement("CUSTOMS_FIELD");
Element HEAD_4 = document.createElement("SEND_TIME");
HEAD_1.setTextContent("59A72DE9-8D13-4DEB-AFB3-B0E4C640ABC9");
HEAD_2.setTextContent("00005212");
HEAD_3.setTextContent("ITA");
HEAD_4.setTextContent("2009-11-06T21:50:38.646+08:00");
messageHead.appendChild(HEAD_1);
messageHead.appendChild(HEAD_2);
messageHead.appendChild(HEAD_3);
messageHead.appendChild(HEAD_4);
String[][] arr = new String[][] {
{ "1G1BL52P7TR115520", "AAA", "BBB", "CCC" },
{ "1G1BL52P7TR115521", "DDD", "EEE", "FFF" } };
for (int i = 0; i < 2; i++) {
Element messageITEM = document.createElement("MESSAGE_ITEM");
//MESSAGE_ITEM
Element ITEM_1 = document.createElement("VE_ID_NO");
Element ITEM_2 = document.createElement("YARD_CODE");
Element ITEM_3 = document.createElement("ZONE_NO");
Element ITEM_4 = document.createElement("COLUMN_NO");
ITEM_1.setTextContent(arr[i][0]);
ITEM_2.setTextContent(arr[i][1]);
ITEM_3.setTextContent(arr[i][2]);
ITEM_4.setTextContent(arr[i][3]);
messageITEM.appendChild(ITEM_1);
messageITEM.appendChild(ITEM_2);
messageITEM.appendChild(ITEM_3);
messageITEM.appendChild(ITEM_4);
messageBody.appendChild(messageITEM);
}
message.appendChild(messageHead);
message.appendChild(messageBody);
document.appendChild(message);
// 创建TransformerFactory对象
TransformerFactory tff = TransformerFactory.newInstance();
// 创建 Transformer对象
Transformer tf = tff.newTransformer();
// 输出内容是否使用换行
tf.setOutputProperty(OutputKeys.INDENT, "yes");
// 创建xml文件并写入内容
tf.transform(new DOMSource(document), new StreamResult(new File("book1.xml")));
StringWriter stringWriter = new StringWriter();
tf.transform(new DOMSource(document), new StreamResult(
stringWriter));
System.err.println("生成book1.xml成功");
String content =stringWriter.toString();
// 以xml的形式保存在本地
if (content != null && !content.equals("")) {
FileOutputStream fs = null;
OutputStream out = null;
try {
InputStream is = new ByteArrayInputStream(
content.getBytes("UTF-8"));
byte[] buffer = new byte[is.available()];
fs = new FileOutputStream("D:/other/test/" + "tttest1.xml");
out = new BufferedOutputStream(fs);
is.read(buffer);
out.write(buffer);
out.close();
fs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("生成book1.xml失败");
}
}
2, XStream way
核心:xStream.alias(“MESSAGE_ITEM”,MESSAGE_ITEM.class);
public class MyTest {
public static void main(String[] args) {
// 首先根据xml文件的结构,构建各个构成部分
MyTestMESSAGE message = new MyTestMESSAGE();
MyTestMESSAGE_HEAD messageHead = new MyTestMESSAGE_HEAD();
MyTestMESSAGE_BODY messageBody = new MyTestMESSAGE_BODY();
List<MyTestMESSAGE_ITEM> messageItems = new ArrayList<MyTestMESSAGE_ITEM>();
// 设置MESSAGE_HEAD
messageHead.setKEY_NO("59A72DE9-8D13-4DEB-AFB3-B0E4C640ABC9");
messageHead.setCUSTOMS_FIELD("00005212");
messageHead.setMESSAGE_TYPE("ITA");
messageHead.setSEND_TIME("2009-11-06T21:50:38.646+08:00");
// 设置MESSAGE_ITEM
String[][] arr = new String[][] {
{ "1G1BL52P7TR115520", "AAA", "BBB", "CCC" },
{ "1G1BL52P7TR115521", "DDD", "EEE", "FFF" } };
for (int i = 0; i < 2; i++) {
MyTestMESSAGE_ITEM messageItem = new MyTestMESSAGE_ITEM();
messageItem.setVE_ID_NO(arr[i][0]);
messageItem.setYARD_CODE(arr[i][1]);
messageItem.setZONE_NO(arr[i][2]);
messageItem.setCOLUMN_NO(arr[i][3]);
messageItems.add(messageItem);
}
message.setMESSAGE_BODY(messageBody);
message.setMESSAGE_HEAD(messageHead);
messageBody.setMESSAGE_ITEMS(messageItems);
// xml格式化
Map<String, Class> xstreamProperties = new HashMap<String, Class>();
xstreamProperties.put("MESSAGE_ITEM", MyTestMESSAGE_ITEM.class);
xstreamProperties.put("MESSAGE_BODY", MyTestMESSAGE_BODY.class);
xstreamProperties.put("MESSAGE_HEAD", MyTestMESSAGE_HEAD.class);
xstreamProperties.put("MESSAGE", MyTestMESSAGE.class);
// XStream设置
XStream xstream = new XStream(new DomDriver("UTF-8",
new XmlFriendlyNameCoder("-_", "_")));
for (Map.Entry<String, Class> m : xstreamProperties.entrySet()) {
xstream.alias(m.getKey(), m.getValue());
if (m.getKey().equals("MESSAGE_BODY")) {
try {
if (m.getValue().getDeclaredField("MESSAGE_ITEMS") != null) {
xstream.addImplicitCollection(m.getValue(),
"MESSAGE_ITEMS");
}
} catch (SecurityException e) {
System.out.println("不存在MESSAGE_ITEMS");
} catch (NoSuchFieldException e) {
System.out.println("不存在MESSAGE_ITEMS");
}
}
}
// xstream.alias("MESSAGE_BODY", MyTestMESSAGE_BODY.class);
String content = xstream.toXML(message);
String oldPlaceStr1 = "<MESSAGE>";
String replaceStr1 = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n"
+ "<MESSAGE>";
content = content.replace(oldPlaceStr1, replaceStr1);
// 以xml的形式保存在本地
if (content != null && !content.equals("")) {
FileOutputStream fs = null;
OutputStream out = null;
try {
InputStream is = new ByteArrayInputStream(
content.getBytes("UTF-8"));
byte[] buffer = new byte[is.available()];
fs = new FileOutputStream("D:/other/test/" + "tttest.xml");
out = new BufferedOutputStream(fs);
is.read(buffer);
out.write(buffer);
out.close();
fs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public class MyTestMESSAGE implements Serializable{
private MyTestMESSAGE_HEAD MESSAGE_HEAD;
private MyTestMESSAGE_BODY MESSAGE_BODY;
public MyTestMESSAGE_HEAD getMESSAGE_HEAD() {
return MESSAGE_HEAD;
}
public void setMESSAGE_HEAD(MyTestMESSAGE_HEAD mESSAGE_HEAD) {
MESSAGE_HEAD = mESSAGE_HEAD;
}
public MyTestMESSAGE_BODY getMESSAGE_BODY() {
return MESSAGE_BODY;
}
public void setMESSAGE_BODY(MyTestMESSAGE_BODY mESSAGE_BODY) {
MESSAGE_BODY = mESSAGE_BODY;
}
}
public class MyTestMESSAGE_HEAD implements Serializable{
private String KEY_NO;
private String MESSAGE_TYPE;
private String CUSTOMS_FIELD;
private String SEND_TIME;
public String getKEY_NO() {
return KEY_NO;
}
public void setKEY_NO(String key_no) {
KEY_NO = key_no;
}
public String getMESSAGE_TYPE() {
return MESSAGE_TYPE;
}
public void setMESSAGE_TYPE(String message_type) {
MESSAGE_TYPE = message_type;
}
public String getCUSTOMS_FIELD() {
return CUSTOMS_FIELD;
}
public void setCUSTOMS_FIELD(String customs_field) {
CUSTOMS_FIELD = customs_field;
}
public String getSEND_TIME() {
return SEND_TIME;
}
public void setSEND_TIME(String send_time) {
SEND_TIME = send_time;
}
}
public class MyTestMESSAGE_BODY implements Serializable{
private List<MyTestMESSAGE_ITEM> MESSAGE_ITEMS;
public List<MyTestMESSAGE_ITEM> getMESSAGE_ITEMS() {
return MESSAGE_ITEMS;
}
public void setMESSAGE_ITEMS(List<MyTestMESSAGE_ITEM> mESSAGE_ITEMS) {
MESSAGE_ITEMS = mESSAGE_ITEMS;
}
}
public class MyTestMESSAGE_ITEM implements Serializable{
private String VE_ID_NO;
private String YARD_CODE;
private String ZONE_NO;
private String COLUMN_NO;
public String getVE_ID_NO() {
return VE_ID_NO;
}
public void setVE_ID_NO(String vE_ID_NO) {
VE_ID_NO = vE_ID_NO;
}
public String getYARD_CODE() {
return YARD_CODE;
}
public void setYARD_CODE(String yARD_CODE) {
YARD_CODE = yARD_CODE;
}
public String getZONE_NO() {
return ZONE_NO;
}
public void setZONE_NO(String zONE_NO) {
ZONE_NO = zONE_NO;
}
public String getCOLUMN_NO() {
return COLUMN_NO;
}
public void setCOLUMN_NO(String cOLUMN_NO) {
COLUMN_NO = cOLUMN_NO;
}
}