xiaowei8782088 发表于 2015-8-6 10:09:52

apache.commoms.digester3 解析xml文件

Technorati 标签: java,xml,digester,xmlrule,FromXmlRulesModule1 简介
  java解析xml,就个人所知有3种方法DOM、SAX和Digester。前两种需要编写大量代码,且不利于代码移植和复用;
  Digester解析xml又有两种方式,代码和xmlrule。xmlrule方式读取规定格式的xml解析规则文件,将标签和属性值赋值到指定的Java POJO对象。
2 待解析的xml文件




10.00000000
10.00000000
10.00000000


20.00000000
20.00000000
20.00000000


30.00000000
30.00000000
30.00000000


40.00000000
40.00000000
40.00000000




3 解析规则文件







                     

            




            
            

  

4 存贮解析结果的Java POJO

package xml.digester;
import java.util.Vector;
public class Bound{
private Vector pts = new Vector();
public void addPt(GeoPt pt){
pts.add(pt);
}   
public Vector getPt(){
return pts;
}   
}

package xml.digester;
public class GeoPt{
public double dX;
public double dY;
public double dZ;
public double getdX() {
return dX;
}
public void setdX(double dX) {
this.dX = dX;
}
public double getdY() {
return dY;
}
public void setdY(double dY) {
this.dY = dY;
}
public double getdZ() {
return dZ;
}
public void setdZ(double dZ) {
this.dZ = dZ;
}   
}
注意:

[*]
类成员变量名不可为X、Y、Z,否则digester报错,原因不明。
[*]可以先定义成员变量,然后用MyEclipse工具“生成setter和getter函数”
  

5 xmlrule文件加载类

package xml.digester;
import java.io.File;
import org.apache.commons.digester3.xmlrules.FromXmlRulesModule;
public class myRulesLoader extends FromXmlRulesModule
{
private String xmlrule;
public myRulesLoader(String xmlfile){   
xmlrule = xmlfile;      
}
@Override
protected void loadRules()
{      
loadXMLRules( new File( xmlrule ) );
}
}
  

6 运行示例

public static void main(String[] args){
try {      
// 加载xmlrule文件
DigesterLoader loader = newLoader(new myRulesLoader("d:\\drule3.xml"));
// 创建Digester实例
Digester digester = loader.newDigester();
// 解析xml文件
FileInfo info = (FileInfo) digester.parse(new File("d:\\9.xml"));
// 分析解析结果
info.show();
}
catch (Exception e){
e.printStackTrace();
}
}
  

7 结果示意

...
Name: Band_1KM_Emissive
Fname: G:\YX\HDF_NC_H5\MOD021KM.A2009345.0400.005.2010257180913.hdf
Description:    1KM Emissive Band Numbers for Subsetting
NS:   16
NL:   1
NB:   1
FileType:    HDF4
DataType:    FLOAT
Satellite:null
Sensor:null
picPath:   
xyz:   0.00.00.0
xyz:   0.00.00.0
xyz:   0.00.00.0
xyz:   0.00.00.0
...
页: [1]
查看完整版本: apache.commoms.digester3 解析xml文件