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 ...
随机推荐
- Django(三)url和返回
location 最后一个文件夹名就是project名,我用了Django_Plan. Application 是自动加入的APP名字,我用了Plan 编辑Django_Plan\Django_Pla ...
- 扫描系统句柄表(WIN7 x86)(附录源码)
PspCidTable存放着系统中所有的进程和线程对象,其索引也就是进程ID(PID)或线程ID(TID).先通过它来看看windbg里的HANDLE_TABLE结构: 可以看到地址 0x83f41b ...
- 玩转X-CTR100 l STM32F4 l CAN通信
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] X-CTR100控制器STM32F4处理器内置CAN ...
- 2019.1.7 EDVT measurement III
Frequency Accuracy SpecificationFor IEEE 802.11a 17.3.9.4 ± 20ppm MaximumFor IEEE 802.11b 18.4.7.4± ...
- C#读取Access数据表中某一列内容,保存至数组
string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=product.mdb";OleDbConnecti ...
- happypack 进一步 优化 build速率
1.webpack.base.conf.js 使用happypack的正确姿势: 'use strict' const path = require('path') const utils = req ...
- 查看Linux下系统资源占用常用命令
一 top命令 1.作用top命令用来显示执行中的程序进程,使用权限是所有用户. 2.格式top [-] [d delay] [q] [c] [S] [s] [i] [n] 3.主要参数d:指定更新的 ...
- 最大似然估计和最大后验概率MAP
最大似然估计是一种奇妙的东西,我觉得发明这种估计的人特别才华.如果是我,觉得很难凭空想到这样做. 极大似然估计和贝叶斯估计分别代表了频率派和贝叶斯派的观点.频率派认为,参数是客观存在的,只是未知而矣. ...
- Ubuntu install TensorFlow
/******************************************************************************** * Ubuntu install T ...
- int类型转string类型c++
前言 使用VS的过程中,经常会用到需要将int类型数据转换为字符串类型,便于显示信息等. 实现方法 c++11标准中的to_string函数,在VS安装文件的include文件中生成的只读文件,使用起 ...