采用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对象的集合类
下面处理方法依旧是采用迭代器遍历该集合类,得到该字段的逗号表达式。
读取程序如下:
若建立两个表来存储该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(); }
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- DB2实例管理
- DB2实例管理
- XML 与 JSON 优劣对比
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- As3.0 xml + Loader应用代码
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- Mootools 1.2教程(2) DOM选择器
- DOM 事件流详解
- CentOS下DB2数据库安装过程详解
- 网马生成器 MS Internet Explorer XML Parsing Buffer Overflow Exploit (vista) 0day
- ext读取两种结构的xml的代码