解析xml文档,并将xml文档中的数据拼接成insert语句

 

education.xml的内容是:




  20140529100039
  人事子集查询回复
  HR
  XYRC
  ws_inferConnect
  2
  1
 
 
  2018/09/20 15:40:21
 
    SPECIALTY_TEC
    70025
    abcd
 



 


   
   
   
 


开始解析

public class AnalysisXmlAction {
    
    public static void main(String[] args) {
        SAXReader saxReader = new SAXReader();
        Document document;
        String xmlString = "";
        try {
            document = saxReader.read(new File("src/main/resources/education.xml"));
            xmlString = document.asXML();// 将xml内容转化为字符串
        } catch (Exception e) {
            e.printStackTrace();
            xmlString = "";
        }
        new AnalysisXmlAction().analysisXml(xmlString);
    }

    @SuppressWarnings("rawtypes")
    public void analysisXml(String str) {
        List sqlArray = new ArrayList();
        try {
            // 通过reader对象的read方法加载books.xml文件,获取docuemnt对象。
            Document document = DocumentHelper.parseText(str);
            // 通过document对象获取根节点bookstore
            Element bookStore = document.getRootElement();
            // 通过element对象的elementIterator方法获取迭代器
            Iterator oneLev = bookStore.elementIterator(); // 第一层下面的子集
            // 遍历迭代器,获取根节点中的信息
            while (oneLev.hasNext()) {
                Element data = (Element) oneLev.next();
                // 获取book的属性名以及 属性值
                Iterator twoLev = data.elementIterator(); // 获取子节点
                String sql = "";
                while (twoLev.hasNext()) {
                    Element bookChild = (Element) twoLev.next();
                    String name = bookChild.getName();
                    @SuppressWarnings("unchecked")
                    List twoLevAttr = bookChild.attributes();
                    if ("TABLE".equalsIgnoreCase(name)) {
                        for (Attribute attr : twoLevAttr) {// 遍历当前节点的所有属性
                            String attrName = attr.getName();// 属性名称
                            String attrValue = attr.getValue();
                            if (!"TABLENAME".equalsIgnoreCase(attrName)) {
                                sql +=  attrName + "," ;
                            } else {
                                sql += "insert into RL_" + attrValue + "(id_key,";
                            }
                        }
                        sql = sql.substring(0, sql.length() - 1);
                        sql += ") values (xyrc.seq_cnp_idkey.nextval,";
                        Iterator threeLev = bookChild.elementIterator();
                        while (threeLev.hasNext()) {
                            String insertSql = sql;
                            Element bookChildAttrs = (Element) threeLev.next();
                            @SuppressWarnings("unchecked")
                            List listAttr = bookChildAttrs.attributes();
                            for (Attribute attr : listAttr) {// 遍历当前节点的所有属性
                                String value = attr.getValue();// 属性的值
                                if (!"QUERY".equalsIgnoreCase(value)) {
                                    insertSql += "'" + value + "',";
                                }

                            }
                            insertSql = insertSql.substring(0, insertSql.length() - 1);
                            insertSql += ")";
                            sqlArray.add(insertSql);
                            System.out.println("insertSql:" + insertSql);
                        }
                    }
                }
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        //analysisXmlService.insertAll(sqlArray);
    }
    
}

最后拼成的sql语句是:

insert into RL_SPECIALTY_TEC(id_key,BASIC_ID,NAME,ZYJSRJZG,QUACHANLL,QUADATEE,TESTNAME,POSORDER,ZYJSZWDJ,REM) values (xyrc.seq_cnp_idkey.nextval,'70025','小明','助理工程师','确认','1992-08-01 00:00','职称改革领导小组','工程技术人员','助理级(助教级)','')

你可能感兴趣的:(xml,Document,xml)