您的位置:首页 > 数据库

采用Dom4j及xpath解析xml文件

2016-01-05 22:52 645 查看
首先将Dom4j和xpath的包引入,之后对如下所示的xml文件进行解析,解析之后可以将相关信息导入数据库。分析该xml文件,最外层标签名为ACCESOS,可作为数据库表名。最内层有四个标签,分别有相应的取值,最后一个标签下还有七个子标签,对于这七个子标签可以选择独立建表,然后通过外键与主表关联。

若建立两个表来存储该xml文件,则主表’ACCESOS’取字段’NUMERO’作为主键。在子表TURNOS中,加一个字段’NUMERO’作为主键。两表通过’NUMERO’字段进行外键关联。

本例采用另一种方式,及将’TURNOS’作为主表的一个字段,里面所有的标签取值用逗号表达式表示,最后存储在一张表中。



首先得到org.dom4j.Document对象:

Document doc = new SAXReader().read(“文件路径+文件名.xml”);

然后用Document的selectNodes方法得到指定标签下的org.dom4j.Element集合类:

List itemList = doc.selectNodes(“/ACCESOS/item/SOCIO”);

该语句便使用了Xpath类库,很方便地取到了相应标签下的Element集合类。在该xml文件中,即取到了包含两个Element对象的集合类。

下一步便开始对该集合类遍历(可使用迭代器Iterator ):

for(Iterator iter = itemList.iterator(); iter.hasNext(); )

在迭代器循环内部,可得到每个Element对象并进行处理,从而得到标签的值

Element e1 = (Element)iter.next(); //得到了集合类内部的Element对象

String NUMERO = e1.elementText(“NUMERO”); //将NUMERO标签内的值存取为String对象

.

.

.

依次得到其他的标签值。

最后一个标签读取方式:

List TURNOSlist = e1.elements(“TURNOS”); //得到的是Element对象的集合类

下面处理方法依旧是采用迭代器遍历该集合类,得到该字段的逗号表达式。

读取程序如下:

Document doc = new SAXReader().read("/XMLFile/test01.XML");
List itemList = doc.selectNodes("/ACCESOS/item/SOCIO");
for(Iterator iter = itemList.iterator(); iter.hasNext(); ) {
Element e1 = (Element)iter.next();
String NUMERO = e1.elementText("NUMERO");
String REPOSICION = e1.elementText("REPOSICION");
String NOMBRE = e1.elementText("NOMBRE");
StringBuffer sbTURNOS = new StringBuffer();
List TURNOSlist = e1.elements("TURNOS");
for(Iterator iter1 = TURNOSlist.iterator(); iter1.hasNext(); ) {
Element e2 = (Element)iter1.next();
String LU = e2.elementText("LU");
String MA = e2.elementText("MA");
String MI = e2.elementText("MI");
String JU = e2.elementText("JU");
String VI = e2.elementText("VI");
String SA = e2.elementText("SA");
String DO = e2.elementText("DO");
sbTURNOS.append(LU)
.append(",")
.append(MA)
.append(",")
.append(MI)
.append(",")
.append(JU)
.append(",")
.append(VI)
.append(",")
.append(SA)
.append(",")
.append(DO);
}
/*System.out.println(sbTURNOS.toString());*/
psta.setString(1, NUMERO);
psta.setString(2, REPOSICION);
psta.setString(3, NOMBRE);
psta.setString(4, sbTURNOS.toString());
psta.addBatch();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  xml 数据库 xpath dom