• java 解析pdm文档


    前面展示了pdm 的xml结构,既然知道了结构,用java来解析也不会太难,这就为代码自动生成奠定了基础

    package com.core.reader.pdmreader.imp;
    
    import java.io.File;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    
    public class PdmParser {
    
        public Table[] parsePDM_VO(String filePath) {
            Table[] tabs = new Table[] {};
            List<Table> voS = new ArrayList<Table>();
            Table vo = null;
            Column[] cols = null;
            File f = new File(filePath);
            SAXReader sr = new SAXReader();
            Document doc = null;
            try {
                doc = sr.read(f);
            } catch (DocumentException e) {
                e.printStackTrace();
            }
            Iterator itr = doc.selectNodes("//c:Tables//o:Table").iterator();
            while (itr.hasNext()) {
                vo = new Table();
                cols = new Column[] {};
                List<Column> list = new ArrayList<Column>();
                Column col = null;
                Element e_table = (Element) itr.next();
                vo.setTableName(e_table.elementTextTrim("Name"));
                vo.setTableCode(e_table.elementTextTrim("Code"));
                Iterator itr1 = e_table.element("Columns").elements("Column").iterator();
                while (itr1.hasNext()) {
                    try {
    
                        col = new Column();
                        Element e_col = (Element) itr1.next();
                        String pkID = e_col.attributeValue("Id");
                        col.setDefaultValue(e_col.elementTextTrim("DefaultValue"));
                        col.setName(e_col.elementTextTrim("Name"));
                        if(e_col.elementTextTrim("DataType").indexOf("(") >0){
                            col.setType(e_col.elementTextTrim("DataType").substring(0, e_col.elementTextTrim("DataType").indexOf("(")));
                        }else {
                            col.setType(e_col.elementTextTrim("DataType"));
                        }
                        col.setCode(e_col.elementTextTrim("Code"));
                        col.setLength(e_col.elementTextTrim("Length") == null ? null : Integer.parseInt(e_col.elementTextTrim("Length")));
                        if(e_table.element("Keys")!=null){
                            String keys_key_id = e_table.element("Keys").element("Key").attributeValue("Id");
                            String keys_column_ref = e_table.element("Keys").element("Key").element("Key.Columns")
                                    .element("Column").attributeValue("Ref");
                            String keys_primarykey_ref_id = e_table.element("PrimaryKey").element("Key").attributeValue("Ref");
                            
                                if (keys_primarykey_ref_id.equals(keys_key_id) && keys_column_ref.equals(pkID)) {
                                    col.setPkFlag(true);
                                    vo.setPkField(col.getCode());
                                }
                        
                        }
                        list.add(col);
                        System.out.println(col);
                    } catch (Exception ex) {
                        // col.setType(e_col.elementTextTrim("DataType"));
                        System.out.println("+++++++++有错误++++" );
                        ex.printStackTrace();
                    }
                }
                vo.setCols(list.toArray(cols));
                voS.add(vo);
                System.out.println(vo);
                System.out.println("======================");
                System.out.println();
            }
            return voS.toArray(tabs);
        }
    
        public static void main(String[] args) {
            PdmParser pp = new PdmParser();
            Table[] tab = pp.parsePDM_VO("E:\电子商务平台\doc\数据模型\amysql.pdm");
            pp.initTable(tab);
        }
    
        public void initTable(Table[] tabs) {
            List<String> list = new ArrayList<String>();
            for (Table tab : tabs) {
                list.add(tab.getTableName());
                System.out.println(tab.getTableName());
            }
    //        for (int i = 0; i < list.size(); i++) {
    //            System.out.println(list.get(i));
    //        }
        }
    }

    如果出现异常:Caused by: java.lang.ClassNotFoundException: org.jaxen.JaxenException

    出现这个问题的原因是: Dom4j是依赖了这个包jaxen才能够使用XPath来定位,所以把这个所以把这个包导入到工程中,就可以使用了。

    下载jaxen.jar链接:http://download.csdn.net/detail/u014682413/7633503

  • 相关阅读:
    每周必写
    每周必写
    每周必写
    感想及阅读内容
    阅读内容及感想
    每周感想和阅读内容
    每周感想及阅读内容
    每周感想及阅读内容
    分答
    每周感想及阅读内容
  • 原文地址:https://www.cnblogs.com/wpcnblog/p/8486857.html
Copyright © 2020-2023  润新知