一、Degister 是干嘛的
Digester 被用于完成 xml 解析。Digester 是 Jakarta 子项目 Commons 下的一个模块,支持基于规则的对任意 XML 文档的处理。它最初是 Structs 项目的一部分,后因其通用性而划归 Commons
二、使用
- 引入 jar 包
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-digester3</artifactId>
<version>3.2</version>
</dependency>
- 创建测试 xml 文件
<?xml version="1.0" encoding="UTF-8" ?>
<services name="服务名" time="服务时间">
<server>
<name>具体服务名</name>
<company>公司名</company>
</server>
</services>
- 创建对应的服务类,方便将 xml 中解析的数据存入
public class Services {
private String name;
private String time;
private ArrayList<Server> servers = new ArrayList();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ArrayList getServices() {
return servers;
}
public void setServices(ArrayList servers) {
this.servers = servers;
}
public void addServer(Server server){
servers.add(server);
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
@Override
public String toString() {
return "Services{" +
"name='" + name + '\'' +
", time='" + time + '\'' +
", servers=" + servers +
'}';
}
}
public class Server {
private String name;
private String company;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public void setAttribute(String name,String company){
this.name = name;
this.company = company;
}
@Override
public String toString() {
return "Server{" +
"name='" + name + '\'' +
", company='" + company + '\'' +
'}';
}
}
- 编码
public class Test {
public static void main(String[] args) throws IOException, SAXException {
File file = new File("xml/myTest.xml");
Digester digester = new Digester();
// 从 services 开始解析,并新键一个 Services 作为根对象
digester.addObjectCreate("services", Services.class);
// 根据 services 标签属性值配置对象的属性,此类的属性必须具有setter
digester.addSetProperties("services");
// 第一层元素开始
digester.addObjectCreate("services/server", Server.class);
digester.addCallMethod( "services/server/name" , "setName" , 0 );
digester.addCallMethod( "services/server/company" , "setCompany" , 0 );
digester.addSetNext( "services/server" , "addServer" );
Services services = (Services)digester.parse( file);
System.out.println("==> name : "+services.getName()+ " ,time: "+services.getTime()+ " size: "+services.getServices().size());
if(services.getServices().size() > 0){
Server service = (Server) services.getServices().get(0);
System.out.println(" ---> "+service);
}
}
}