java 解析 Xml ( VTDGen、AutoPilot )的应用

java 解析 Xml ( VTDGen、AutoPilot )的应用 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();
        }
    }
}

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值