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
java 解析pdm文档的更多相关文章
- java 解析XML文档
Java 解析XML文档 一.解析XML文档方式: 1.DOM方式:将整个XML文档读取到内存中,按照XML文件的树状结构图进行解析. 2.SAX方式:基于事件的解析,只需要加载XML中的部分数据,优 ...
- Java解析XML文档(简单实例)——dom解析xml
一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object ...
- Java解析XML文档——dom解析xml
一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object M ...
- 浅谈用java解析xml文档(四)
继续接上一文,这一阵子因为公司项目加紧,导致最后一个解析xml文档的方式,还没有总结,下面总结使用dom4J解析xml. DOM4J(Document Object Model for Java) 使 ...
- 浅谈用java解析xml文档(三)
接上一篇,本文介绍使用JDOM解析xml文档, 首先我们还是应该知道JDOM从何而来,是Breet Mclaughlin和Jason Hunter两大Java高手的创作成果,2000年初, JDOM作 ...
- Java解析word文档
背景 在互联网教育行业,做内容相关的项目经常碰到的一个问题就是如何解析word文档. 因为系统如果无法智能的解析word,那么就只能通过其他方式手动录入word内容,效率低下,而且人工成本和录入出错率 ...
- java解析xml文档(dom)
DOM解析XML文档 读取本地的xml文件,通过DOM进行解析,DOM解析的特点就是把整个xml文件装载入内存中,形成一颗DOM树形结构,树结构是方便遍历和和操纵. DOM解析的特性就是读取xml文件 ...
- 浅谈用java解析xml文档(二)
上一文中总结了dom解析xml文档的方式,本文开始总结使用SAX解析xml 的方式及它的优缺点! SAX(Simple API for XML),是指一种接口,或者一个软件包. 首先我们应该知道SAX ...
- 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 ...
随机推荐
- Html.RenderPartial("")与Html.Partial("")区别
这个HtmlHelper的扩展方法Partial,和HtmlHelper自带的 RenderPartial功能比较接近, 两者都可以输出一个Partial视图:其区别如下: <一>. Pa ...
- Python & PyCharm & Django 搭建web开发环境(续)
由于Django自带轻量级的server,因此在前篇博文中,默认使用该server,但实际生产中是不允许这么干的,生产环境中通常使用Apache Httpd Server结合mod_wsgi.so来做 ...
- DevExpress v17.2新版亮点—Windows 10篇
用户界面套包DevExpress v17.2日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了Windows 10 Controls v17.2 的新功能,快来下载试用新版本! ...
- SharePoint 网站管理-PowerShell
1. 显示场中所有可用的网站集 Get-SPSite 2. 显示某一Web应用程序下可用的网站集 Get-SPSite –WebApplication "SharePoint – 80&qu ...
- kbmMW CopyRawRecords 用法
复制一个ClientQuery数据集到另外一个ClientQuery,我们应该怎么做?并注意什么呢? kbmMW为我们提供了好几个方法,有LoadFromDataSet,CopyRawRecords, ...
- Android输入法框架系统(下)
程序焦点获取事件导致输入法显示 从上面可以知道程序获得焦点时,程序端会先间接的调用IMMS的startInput将焦点View绑定到输入法,然后会调用IMMS的windowGainFocus函数,这个 ...
- MySQL配置参数详解
# 以下选项会被MySQL客户端应用读取. # 注意只有mysql附带的客户端应用程序保证可以读取这段内容. # 如果你想你自己的MySQL应用程序获取这些值. # 需要在MySQL客户端库初始化的时 ...
- webStrom 美化
webStrom 激活: 注册时,在打开的License Activation窗口中选择“License server”,在输入框输入下面的网址: http://idea.iteblog.com/ke ...
- 务实java基础之集合总结
Java 提供了容纳对象(或者对象的句柄)的多种方式.其中内建的类型是数组,此外, Java 的工具库提供了一些 "集合类",利用这些集合类,我们可以容纳乃至操纵自己的对象. 声明 ...
- calculate MAC,Lisence,Checksum and generate muti-file
/************************************************************************* * calculate MAC,Lisence,C ...