IMFXMLMaker.java 5.2 KB
package com.airport.util.parse;
import org.apache.log4j.Logger;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;

public class IMFXMLMaker {
    private static final Logger logger = Logger.getLogger(IMFXMLMaker.class);
    private Document XmlDocument;
    private Element RootElement;
    private Element SndrElement;
    private Element RcvrElement;
    private Element SEQNElement;
    private Element TYPEElement;
    private Element STYPElement;
    private Element originalELEMENT;

    private String XmlStr;
    private String SNDR;
    private String RCVR;
    private String SEQN;
    private String TYPE;
    private String STYP;
    private String IMFContent;
    private String IMFXml;

    public String getXmlStr() {
        return XmlStr;
    }

    public void setXmlStr(String xmlStr) {
        XmlStr = xmlStr;
    }

    public String getSNDR() {
        return SNDR;
    }

    public void setSNDR(String SNDR) {
        this.SNDR = SNDR;
    }

    public String getRCVR() {
        return RCVR;
    }

    public void setRCVR(String RCVR) {
        this.RCVR = RCVR;
    }

    public String getSEQN() {
        return SEQN;
    }

    public void setSEQN(String SEQN) {
        this.SEQN = SEQN;
    }

    public String getTYPE() {
        return TYPE;
    }

    public void setTYPE(String TYPE) {
        this.TYPE = TYPE;
    }

    public String getSTYP() {
        return STYP;
    }

    public void setSTYP(String STYP) {
        this.STYP = STYP;
    }

    public String getIMFContent() {
        return IMFContent;
    }

    public void setIMFContent(String IMFContent) {
        this.IMFContent = IMFContent;
    }

    public String getIMFXml() {
        return IMFXml;
    }

    public void setIMFXml(String IMFXml) {
        this.IMFXml = IMFXml;
    }

    //初始化报文头部节点
    public IMFXMLMaker(String sndr,String seqn,String type,String styp){
        this.SNDR = sndr;
        this.SEQN = seqn;
        this.TYPE = type;
        this.STYP = styp;

        this.XmlDocument = new Document();

        //跟节点
        this.RootElement = new Element("MSG");
        this.XmlDocument.addContent(this.RootElement);

        //meta节点
        Element MetaElement = new Element("META");
        this.RootElement.addContent(0,MetaElement);

        //原始内容节点,储存最原始报文内容的节点
        this.originalELEMENT = new Element("original");
        this.RootElement.addContent(1,this.originalELEMENT);

        //meta下的子节点们
        SndrElement = new Element("SNDR");
        RcvrElement = new Element("RCVR");
        SEQNElement = new Element("SEQN");
        Element DDTMElement = new Element("DDTM");
        TYPEElement = new Element("TYPE");
        STYPElement = new Element("STYP");

        MetaElement.addContent(0,SndrElement);
        MetaElement.addContent(1,RcvrElement);
        MetaElement.addContent(2,SEQNElement);
        MetaElement.addContent(3,DDTMElement);
        MetaElement.addContent(4,TYPEElement);
        MetaElement.addContent(5,STYPElement);

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
        String dateString = simpleDateFormat.format(new Date());
        DDTMElement.setText(dateString);

        SndrElement.setText(this.SNDR);
        SEQNElement.setText(this.SEQN);
        TYPEElement.setText(this.TYPE);
        STYPElement.setText(this.STYP);

    }

    public  String finalXmlStr(){

        try{
            Document contentDocument = string2Doc(this.IMFContent);
            this.originalELEMENT.addContent(0,contentDocument.detachRootElement());

            String backXml = doc2String(this.XmlDocument);
            return backXml;
        }catch (Exception e){
            e.printStackTrace();
            return this.SEQN+"error";
        }

    }

    /**
     * 字符串转换为DOCUMENT
     *
     * @param xmlStr 字符串
     * @return doc JDOM的Document
     * @throws Exception
     */
    public static Document string2Doc(String xmlStr) throws Exception {
        java.io.Reader in = new StringReader(xmlStr);
        Document doc = (new SAXBuilder()).build(in);
        return doc;
    }

    /**
     * Document转换为字符串
     *
     * @param doc DOCUMENT对象
     * @return xmlStr 字符串
     * @throws Exception
     */
    public  String doc2String(Document doc) throws Exception {
        Format format = Format.getPrettyFormat();
        format.setEncoding("UTF-8");// 设置xml文件的字符为UTF-8,解决中文问题
        XMLOutputter xmlout = new XMLOutputter(format);
        ByteArrayOutputStream bo = new ByteArrayOutputStream();
        xmlout.output(doc, bo);
        return bo.toString();
    }

    /**
     * XML转换为Document
     *
     * @param xmlFilePath XML文件路径
     * @return doc Document对象
     * @throws Exception
     */
    public static Document xml2Doc(String xmlFilePath) throws Exception {
        File file = new File(xmlFilePath);
        return (new SAXBuilder()).build(file);
    }

    public  void main(String[] args) throws Exception{
        finalXmlStr();
    }
}