前面展示了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

java 解析pdm文档的更多相关文章

  1. java 解析XML文档

    Java 解析XML文档 一.解析XML文档方式: 1.DOM方式:将整个XML文档读取到内存中,按照XML文件的树状结构图进行解析. 2.SAX方式:基于事件的解析,只需要加载XML中的部分数据,优 ...

  2. Java解析XML文档(简单实例)——dom解析xml

      一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object ...

  3. Java解析XML文档——dom解析xml

    一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object M ...

  4. 浅谈用java解析xml文档(四)

    继续接上一文,这一阵子因为公司项目加紧,导致最后一个解析xml文档的方式,还没有总结,下面总结使用dom4J解析xml. DOM4J(Document Object Model for Java) 使 ...

  5. 浅谈用java解析xml文档(三)

    接上一篇,本文介绍使用JDOM解析xml文档, 首先我们还是应该知道JDOM从何而来,是Breet Mclaughlin和Jason Hunter两大Java高手的创作成果,2000年初, JDOM作 ...

  6. Java解析word文档

    背景 在互联网教育行业,做内容相关的项目经常碰到的一个问题就是如何解析word文档. 因为系统如果无法智能的解析word,那么就只能通过其他方式手动录入word内容,效率低下,而且人工成本和录入出错率 ...

  7. java解析xml文档(dom)

    DOM解析XML文档 读取本地的xml文件,通过DOM进行解析,DOM解析的特点就是把整个xml文件装载入内存中,形成一颗DOM树形结构,树结构是方便遍历和和操纵. DOM解析的特性就是读取xml文件 ...

  8. 浅谈用java解析xml文档(二)

    上一文中总结了dom解析xml文档的方式,本文开始总结使用SAX解析xml 的方式及它的优缺点! SAX(Simple API for XML),是指一种接口,或者一个软件包. 首先我们应该知道SAX ...

  9. JAVA读取XML,JAVA读取XML文档,JAVA解析XML文档,JAVA与XML,XML文档解析(Document Object Model, DOM)

    使用Document Object Model, DOM解析XML文档 也可参考我的新浪博客:http://blog.sina.com.cn/s/blog_43ac5543010190w3.html ...

随机推荐

  1. Criteria 使用指南

    转自:http://www.blogjava.net/jerry-zhaoj/archive/2009/03/03/257546.html Restrictions的几个常用限定查询方法如下表所示: ...

  2. Spring Data JPA 复杂/多条件组合分页查询

    推荐视频: http://www.icoolxue.com/album/show/358 public Map<String, Object> getWeeklyBySearch(fina ...

  3. NodeJS express不是外部或内部命令的解决办法

    今天在用express生成项目的时候,使用cmd命令窗口发现express不是“内部或外部命令......”.但是我已经使用了npm install -g express成功安装了express模块插 ...

  4. 玩转X-CTR100 l STM32F4 l BMP280气压计传感器

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器 扩展BMP ...

  5. ReentrantLock的原理解析

    重入锁(ReentrantLock)是一种可重入无阻塞的同步机制.性能同synchronized接近(老版本jdk中性能很差). 下面重点看下常用的lock()和unlock()方法的实现原理. lo ...

  6. iOS 去除警告 看我就够了

    你是不是看着开发过程中出现的一堆的警告会心情一阵烦躁,别烦躁了,看完此文章,消除警告的小尾巴. 一.SVN 操作导致的警告 1.svn删除文件后报错 ”xx“is missing from worki ...

  7. SQL 基础--> NEW_VALUE 的使用

    --=============================== -- SQL 基础--> NEW_VALUE 的使用 --=============================== 通常 ...

  8. opencv-python教程学习系列11-几何变换

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍几何变换,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统环境 系统: ...

  9. 20155315 2016-2017-2 《Java程序设计》第九周学习总结

    教材学习内容总结 1.JDBC架构 数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网 ...

  10. C# 处理DateTime算法,取某月第1天及最后一天

    代码如下所示: /// <summary> /// 取得某月的第一天 /// </summary> /// <param name="datetime" ...