java 解析 Xml ( VTDGen、AutoPilot )的使用
今天主要用到了对xml的解析,现在做个记录,首先我贴一段我参考的别人的代码。里面的注释描述的很清楚。
?
?
package com.ytxsoft.xml;import com.ximpleware.AutoPilot;import com.ximpleware.VTDGen;import com.ximpleware.VTDNav;public class UserVTDXML { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub try{ VTDGen gen =new VTDGen(); //解析student.xml对象,不含有命名空间 gen.parseFile("f:\\student.xml", false); VTDNav nav =gen.getNav(); AutoPilot pilot =new AutoPilot(); //将导航器绑定到pilot对像上 //如果把VTDNav表达为车辆上导航仪器的话,那么AutoPilot就代表开车人,他能更智能化的找到XPATH表达的含义 pilot.bind(nav); //设置重新设置一个xpath表达式的字符串,但是通常是在之后调用 pilot.selectXPath("/students/student"); //evalXPath()返回nodeset集合中的下一个节点,如果检测到为匹配的节点,则返回为-1 System.out.println(pilot.evalXPath()); System.out.println(pilot.evalXPathToBoolean()); System.out.println(pilot.evalXPathToNumber()); System.out.println(pilot.evalXPathToString()); System.out.println(pilot.getExprString()); //最终操作XML的,还得让VTDNav来做,可见pilot也只是起了一个导航的作用 if(pilot.evalXPath()!=-1){ System.out.println(nav.toString(nav.getAttrVal("name"))); } }catch(Exception ex){ ex.printStackTrace(); } }}
?
看过这段代码后相信已经有一些了解了,但仍可能和我一样还存在疑惑,下面是我修改后的一段代码,主要作用是:把下面这种xml文件解析:
?
?
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"><body><id>0001</id><name>zhangsan</name><records><record><school>frist</school></record><record><school>second</school></record></records></body>?
取出<record>下的<school>中的信息,则可以通过下面的代码实现:
?
?
?
package com.xml;import java.util.ArrayList;import java.util.List;import com.ximpleware.AutoPilot;import com.ximpleware.VTDGen;import com.ximpleware.VTDNav;public class TestXml {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubtry {VTDGen gen = new VTDGen();// 解析student.xml对象,不含有命名空间gen.parseFile("e:\\student.xml", false);VTDNav nav = gen.getNav();AutoPilot ap = new AutoPilot();AutoPilot ape = new AutoPilot();// 将导航器绑定到ap对像上// 如果把VTDNav表达为车辆上导航仪器的话,那么Autoap就代表开车人,他能更智能化的找到XPATH表达的含义ap.bind(nav);ape.bind(nav);// 设置重新设置一个xpath表达式的字符串,但是通常是在之后调用ape.selectXPath("/body/records/record");List<String> records = new ArrayList<String>();String school= "" ;// evalXPath()返回nodeset集合中的下一个节点,如果检测到为匹配的节点,则返回为-1while(ape.evalXPath() != -1){ ap.selectXPath("school");school= ap.evalXPathToString();records.add(school);}ape.resetXPath();for(String s : records){System.out.println("===" + s);}} catch (Exception ex) {ex.printStackTrace();}}}?
基本的就这样,介绍到这里了。
?
?
?