com.citic.util;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.XPath;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import com.citic.supis.domain.SqlEntityStatment;
import com.citic.util.comm.CommFun;
import com.citic.util.comm.IConstants;
public class XMLUtil 
implements IConstants{
    private static String oldtag = ""
;
    private static String xmlstr = "", xmlheads = ""
;
    private static int debuglevel = 0
;
    public static void xmlCreate(String tmpstr, String createxmlfile) {
        if(tmpstr.length()<
minxmllength){
            return;    
        }
        try {
            xmlCreate(DocumentHelper.parseText(tmpstr), createxmlfile);
        } catch (DocumentException e) {
            CommFun.log(ERR, "根据字符串创建XML文档出错开始"
);
            CommFun.log(ERR,tmpstr);
            e.printStackTrace();
            CommFun.log(ERR, "根据字符串创建XML文档出错信息结束"
);
        }
    }
    
    
    public static void xmlCreate(Document document, String createxmlfile) {
        OutputFormat format =
 OutputFormat.createPrettyPrint();
        String encod = "UTF-8"
;
        format.setEncoding(encod);
        int bytes = 0
;
        format.setNewLineAfterDeclaration(false);
        String pthseparator = System.getProperty("file.separator"
);
        File f = 
new File(createxmlfile.substring(0
,
                createxmlfile.lastIndexOf(pthseparator)));
        CommFun.log(debuglevel, f.getParent()+","+
createxmlfile);
        if (!
f.exists()) {
            f.mkdirs();
        }
        FileOutputStream fos;
        try {
            bytes =
 document.asXML().getBytes(encod).length;
            fos = 
new FileOutputStream(createxmlfile);
            XMLWriter writer= 
new XMLWriter(fos, format);
            writer.write(document);
            writer.close();
            fos.close();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        CommFun.log(debuglevel, "xmlcreate:" + createxmlfile + ":" +
 bytes
                + ":"
);
    }
    public static SqlEntityStatment dispElementshead(Document doc,
            HashMap nsMap, String tagname) {
        String xmlstr = "", xmlheads = ""
;
        SqlEntityStatment ses1 = 
new SqlEntityStatment();
        XPath xsub = doc.createXPath("//ns:" +
 tagname);
        xsub.setNamespaceURIs(nsMap);
        List list =
 xsub.selectNodes(doc);
        Iterator itr =
 list.iterator();
        int leafcnt = 0, elecnt = 0
;
        String oldtag = "", newtag = ""
;
        for (
int i = 0; i < 1; i++
) {
            Element pele =
 (Element) itr.next();
            Iterator itrs =
 pele.elements().iterator();
            elecnt =
 pele.elements().size();
            while (itrs.hasNext()) {
                Element ele =
 (Element) itrs.next();
                newtag =
 ele.getName();
                if (!""
.equals(ele.getTextTrim())) {
                    xmlstr += ",‘" + ele.getTextTrim() + "‘"
;
                    xmlheads += "," +
 ele.getName();
                    if (oldtag.equals(newtag)) {
                    }
                    leafcnt++
;
                }
                oldtag =
 newtag;
            }
        }
        /*
         * defaultsep=subi>0?",":"@"; && elecnt != leafcnt
         */
        if (xmlstr.length() > 0 && list.size() == 1
) {
            ses1.setSqlstr(xmlstr.substring(1
).trim());
            ses1.setSqlfileds(xmlheads.substring(1
).trim());
        }
        // System.out.println("ses1:[" + ses1 + "]");
        CommFun.log(debuglevel, "[" + ses1 + "]"
);
        xmlstr = ""
;
        xmlheads = ""
;
        return ses1; 
// .substring(1).split(defaultsep);
    }
    /**
     * 适合对并列的并且以下都可以行成一列的
     * 
     * @param ele
     */
    public static SqlEntityStatment displayAllEle(Element ele) {
        Iterator itr =
 ele.elements().iterator();
        Element element;
        String tagname, text, sf = ""
;
        SqlEntityStatment sestmp = 
null;
        while (itr.hasNext()) {
            element =
 (Element) itr.next();
            tagname =
 element.getName();
            text =
 element.getTextTrim();
            if (""
.equals(text)) {
                displayAllEle(element);
                // xmlstr = "";
                // xmlheads = "";
            } 
else {
                if (!
oldtag.equals(tagname)) {
                    xmlheads += "," +
 tagname;
                } else {
                    sf = "@"
;
                }
                xmlstr += "," + sf +
 text;
                oldtag =
 tagname;
            }
        }
        if (!""
.equals(xmlstr)) {
            String xmltmp = xmlstr.substring(1
);
            xmltmp = xmltmp.replace(",@", "@"
);
            xmltmp = "‘" + xmltmp.replace(",", "‘,‘") + "‘"
;
            // sestmp.setSqlfileds(xmlheads);
            // sestmp.setSqlstr(xmltmp);
            sestmp = 
new SqlEntityStatment(xmlheads.substring(1
), xmltmp);
            // 张明伟 测试20170407 START
            // System.out.println("sestmp:[" + sestmp + "]");
            // System.out.println("xmltmp:[" + xmltmp + "]");
            // System.out.println("xmlheads:[" + xmlheads + "]");
            // 张明伟 测试20170407 END
        }
        return sestmp;
    }
    /**
     * 此功能只处理并列多行的数据,如产生DiffList多行数据
     * 
     * @param doc
     * @param nsMap
     * @param tagname
     */
    public static SqlEntityStatment[] dispElements1(Document doc,
            HashMap nsMap, String tagname) {
        SqlEntityStatment[] sestmps = 
null;
        XPath xsub = doc.createXPath("//ns:" +
 tagname);
        xsub.setNamespaceURIs(nsMap);
        List list =
 xsub.selectNodes(doc);
        Iterator itr =
 list.iterator();
        int listsize =
 list.size();
        if (listsize < 1
) {
            return null;
        }
        sestmps = 
new SqlEntityStatment[listsize];
        for (
int i = 0; i < listsize; i++
) {
            xmlstr = ""
;
            xmlheads = ""
;
            Element pele =
 (Element) itr.next();
            sestmps[i] = 
new SqlEntityStatment(displayAllEle(pele));
            // 张明伟 测试20170407
            CommFun.log(debuglevel, "...." +
 sestmps[i]);
            // 张明伟 测试20170407
        }
        return sestmps;
    }
    public static SqlEntityStatment[] mergedata(SqlEntityStatment sestmp1,
            SqlEntityStatment[] sestmps1) {
        if (sestmps1 == 
null && sestmp1 == 
null) {
            return null;
        } else if (sestmps1 == 
null) {
            return new SqlEntityStatment[] { sestmp1 };
        } else if (sestmp1 == 
null) {
            return sestmps1;
        }
        
        int len =
 sestmps1.length;
        SqlEntityStatment[] sestmps2 = 
new SqlEntityStatment[len];
        String tmpfld = "", tmpstr = ""
;
        for (
int i = 0; i < len ; i++
) {
            tmpfld = ""
;
            tmpstr = ""
;
            if(sestmps1[i]!=
null){
                tmpfld = sestmp1.getSqlfileds() + "," +
 sestmps1[i].getSqlfileds();
                tmpstr = sestmp1.getSqlstr() + "," +
 sestmps1[i].getSqlstr();
            }
            sestmps2[i] = 
new SqlEntityStatment(tmpfld, tmpstr);
            // 张明伟 测试20170407
            CommFun.log(debuglevel, "[" + i + "]:" +
 sestmps2[i]);
            // 张明伟 测试20170407
        }
        return sestmps2;
    }
}
 
JAVA之XML文件解析(根据头部和身体自动组合成SQL)
标签:next   sele   help   otf   comm   replace   tor   int()   play