education.xml的内容是:
<?xml version="1.0" encoding="utf-8"?>
<Msg>
<Head>
<Id>20140529100039</Id>
<Name>厦烟人事子集查询回复</Name>
<Source>HR</Source>
<Target>XYRC</Target>
<SerName>ws_inferConnect</SerName>
<MsgType>2</MsgType>
<RtCode>1</RtCode>
<RtDesc></RtDesc>
<Backup1></Backup1>
<Date>2018/09/20 15:40:21</Date>
<Attrs>
<Attr desc='子集名' illus='SPECIALTY_TEC'>SPECIALTY_TEC</Attr>
<Attr desc='人员ID' illus='0'>70025</Attr>
<Attr>abcd</Attr>
</Attrs>
</Head>
<DATA>
<TABLE TABLENAME='SPECIALTY_TEC' BASIC_ID='人员ID' NAME='姓名' ZYJSRJZG='专业技术资格名称' QUACHANLL='取得资格途径' QUADATEE='取得资格日期' TESTNAME='资格审批单位' POSORDER='专业技术职务名称' ZYJSZWDJ='专业技术资格等级' REM='备注'>
<ROW ACTION='QUERY' BASIC_ID='70025' NAME='吴志文' ZYJSRJZG='助理工程师' QUACHANLL='确认' QUADATEE='1992-08-01 00:00' TESTNAME='厦门卷烟厂职称改革领导小组' POSORDER='工程技术人员' ZYJSZWDJ='助理级(助教级)' REM=''/>
<ROW ACTION='QUERY' BASIC_ID='70025' NAME='吴志文' ZYJSRJZG='高级经济师' QUACHANLL='评审' QUADATEE='2007-11-22 00:00' TESTNAME='中国烟草总公司高级经济师任职资格评审委员会' POSORDER='经济人员' ZYJSZWDJ='副高级(副教授级)' REM=''/>
<ROW ACTION='QUERY' BASIC_ID='70025' NAME='吴志文' ZYJSRJZG='工程师' QUACHANLL='评审' QUADATEE='1997-11-21 00:00' TESTNAME='福建省烟草专卖局职称改革领导小组' POSORDER='工程技术人员' ZYJSZWDJ='中级(讲师级)' REM=''/>
</TABLE>
</DATA>
</Msg>
开始解析
public class AnalysisXmlAction {
public static void main(String[] args) {
SAXReader saxReader = new SAXReader();
Document document;
String xmlString = "";
try {
document = saxReader.read(new File("src/main/resources/education.xml"));
xmlString = document.asXML();// 将xml内容转化为字符串
} catch (Exception e) {
e.printStackTrace();
xmlString = "";
}
new AnalysisXmlAction().analysisXml(xmlString);
}
@SuppressWarnings("rawtypes")
public void analysisXml(String str) {
List<String> sqlArray = new ArrayList<String>();
try {
// 通过reader对象的read方法加载books.xml文件,获取docuemnt对象。
Document document = DocumentHelper.parseText(str);
// 通过document对象获取根节点bookstore
Element bookStore = document.getRootElement();
// 通过element对象的elementIterator方法获取迭代器
Iterator oneLev = bookStore.elementIterator(); // 第一层下面的子集
// 遍历迭代器,获取根节点中的信息
while (oneLev.hasNext()) {
Element data = (Element) oneLev.next();
// 获取book的属性名以及 属性值
Iterator twoLev = data.elementIterator(); // 获取子节点
String sql = "";
while (twoLev.hasNext()) {
Element bookChild = (Element) twoLev.next();
String name = bookChild.getName();
@SuppressWarnings("unchecked")
List<Attribute> twoLevAttr = bookChild.attributes();
if ("TABLE".equalsIgnoreCase(name)) {
for (Attribute attr : twoLevAttr) {// 遍历当前节点的所有属性
String attrName = attr.getName();// 属性名称
String attrValue = attr.getValue();
if (!"TABLENAME".equalsIgnoreCase(attrName)) {
sql += attrName + "," ;
} else {
sql += "insert into RL_" + attrValue + "(id_key,";
}
}
sql = sql.substring(0, sql.length() - 1);
sql += ") values (xyrc.seq_cnp_idkey.nextval,";
Iterator threeLev = bookChild.elementIterator();
while (threeLev.hasNext()) {
String insertSql = sql;
Element bookChildAttrs = (Element) threeLev.next();
@SuppressWarnings("unchecked")
List<Attribute> listAttr = bookChildAttrs.attributes();
for (Attribute attr : listAttr) {// 遍历当前节点的所有属性
String value = attr.getValue();// 属性的值
if (!"QUERY".equalsIgnoreCase(value)) {
insertSql += "'" + value + "',";
}
}
insertSql = insertSql.substring(0, insertSql.length() - 1);
insertSql += ")";
sqlArray.add(insertSql);
System.out.println("insertSql:" + insertSql);
}
}
}
}
} catch (DocumentException e) {
e.printStackTrace();
}
//analysisXmlService.insertAll(sqlArray);
}
}
最后拼成的sql语句是:
insert into RL_SPECIALTY_TEC(id_key,BASIC_ID,NAME,ZYJSRJZG,QUACHANLL,QUADATEE,TESTNAME,POSORDER,ZYJSZWDJ,REM) values (xyrc.seq_cnp_idkey.nextval,'70025','吴志文','助理工程师','确认','1992-08-01 00:00','厦门卷烟厂职称改革领导小组','工程技术人员','助理级(助教级)','')