扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
在本页阅读全文(共19页)
许多时候,要解析一个XML文件,你可以编写一个解析器,用它来仔细研究XML文件,遇到不同标签采取不同的行动(SAX);或者在内存中给文件建立一个树状呈现结构,用树方法来研究树的母子关系(DOM)。虽然这两个方法都可作,但它们要么在编程方面很复杂,要么需要大量的内存或处理器资源,因而并不实用。
Jakarta Project通过其Digester组件,提供另一种解决方法:编写规则将XML元素映射到Java对象中,并为每个对象定义复杂的行动。下面我简单介绍如何用Jakarta Digester处理XML,向你说明如何应用它给XML文件建立模式匹配的规则和对得到的集合执行行动。
注:本教程假定你的系统上已正确安装和配置有Digester。欲了解下载和安装说明,请访问Jakarta Project官方网站。
基本用法
首先我们建立一个XML文件,用它作为本教程的基础实例。打开你最喜欢的文本编辑器,用列表A中的代码建立一个XML文件。
列表A
<?xml version='1.0'?>
<library>
<movie>
<title>The Matrix</title>
<rating>5</rating>
</movie>
<movie>
<title>Mission: Impossible III</title>
<rating>3</rating>
</movie>
<movie>
<title>Minority Report</title>
<rating>5</rating>
</movie>
</library>
在你开始使用Digester之前,你必须清楚了解XML结构和你将要得到的输出结果,因为你设计的类和规则集将依赖于此。因此,在第一个例子中,假定我们要执行的任务是:解析上面的XML文件,并用与它们有关的分级生成一个电影标题列表。
为实现这个目的,我们建立一些Configuration类,用它们作为保存XML数据的Java对象。(列表B)
列表B
public class LibraryDetailsConfiguration{
private HashMap movieDetailsMap;
// movieDetailsMap would store the title as key and
// MovieDetailsConfiguration object as value
public LibraryDetailsConfiguration() {
movieDetailsMap = new HashMap();
}
public void setMovieDetailsMap(HashMap movieDetailsMap) {
this.movieDetailsMap = movieDetailsMap;
}
public HashMap getMovieDetailsMap() {
return movieDetailsMap;
}
public void setMovie(MovieDetailsConfiguration movieDetails) {
movieDetailsMap.put(movieDetails.getTitle(), movieDetails);
}
public void printLibraryDetails(){
Collection movieDetailsColl = this.movieDetailsMap.values();
if (movieDetailsColl != null) {
Iterator itMovieDetails = movieDetailsColl.iterator();
while(itMovieDetails.hasNext()) {
MovieDetailsConfiguration movieDetails = (MovieDetailsConfiguration)
itMovieDetails.next();
System.out.println(movieDetails.getTitle() + " -> " + movieDetails.getRating());
}
} else {
System.out.println("Movie details do not exist");
}
}
}
这个类建立一个Hashmap保存与每部电影有关的信息。对于Hashmap中的每个元素,电影标题是关键;MovieDetailsConfiguration类的一个实例保存相应的元数据(在这个例子中为分级)。这个类的代码应该相当简明:它仅包含保存和获得电影信息——如分级和标题——的标准方法。(列表C)
列表C
public class MovieDetailsConfiguration{
private String title;
private int rating;
public MovieDetailsConfiguration() {
}
public void setTitle(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
public void setRating(int rating) {
this.rating = rating;
}
public int getRating() {
return rating;
}
}
建立Configuration类后,接下来应该建立RuleSet类。RuleSet类中包含Digester将用来解析XML文件的规则集。这些规则是指Digester在解析过程中遇到一个特定的模式时,你希望它采取的行动。查看列表D中的类代码。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者