前面展示了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. Maven 入门篇 ( 上 )

    写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这个想法.这个入门篇分上下两篇.本文着重动手,用 maven 来构建运行 hello ...

  2. python自动化运维之路04

    装饰器 装饰器(decorator)是一种高级Python语法.装饰器可以对一个函数.方法或者类进行加工.在Python中,我们有多种方法对函数和类进行加工,比如在Python闭包中,我们见到函数对象 ...

  3. 增量打包DOC版

    压缩zip的命令有的系统没有的自己去下载一个,否则关闭压缩zip的命令. 有需要的自行更改,这是满足我需求的. 执行 publish.bat 即可,当然需要将文件清单写好放在 resources.tx ...

  4. 2019.1.3 WLAN 802.11 a/b/g PHY Specification and EDVT Measurement I - Transmit Power Level

    This lecture provides the WLAN hardware engineer the essential knowledge of IEEE 802.11 a/b/g physic ...

  5. JSP--TOMCAT-MYSQL web页面添加

    addStudent.jsp如下<%@ page language="java" import="java.util.*" pageEncoding=&q ...

  6. 网页瀑布流布局插件Masonry

    CSS3有实现类似瀑布流布局的属性column,但是遗憾的是这种布局是纵向布局而不支持横向布局.所以比较合适用于文字多列布局. 调用JQuery WaterFall布局插件:http://masonr ...

  7. Kotlin Reference (十二) Extensions

    most from reference Kotlin与C#和Gosu类似,提供了扩展一个新功能的类,而不必继承类或使用任何类型的设计模式,如Decorator(装饰者模式).这是通过称为扩展的特殊声明 ...

  8. TimeSpan格式化字符串格式(摘)

    一直在用DateTime, 却不常用TimeSpan , 今天突然用到了, 发现不知道咋做格式化...百度一下,找到了答案, 在这记录一下, 免得以后找花费时间 以下内容摘抄自 Microsoft D ...

  9. Samsung_tiny4412(驱动笔记10)----mdev,bus,device,driver,platform

    /*********************************************************************************** * * mdev,bus,de ...

  10. shell 脚本实战笔记(2)--环境变量PATH的恩怨情仇

    在linux环境下, 相信大家对环境变量PATH, 多多少少有所接触, 这边讲讲PATH的在linux的前世因缘. 先讲讲一个列子 假如我们在为一个新的应用配置其PATH路径中时,  不小心忽略了原先 ...