`

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 stub
		try {
			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集合中的下一个节点,如果检测到为匹配的节点,则返回为-1
			while(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();
		}
	}
}
 

基本的就这样,介绍到这里了。

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics