它的主要接口都在org.dom4j这个包里定义,下面介绍几个常用的接口[9]:
Attribute 定义了XML的属性;
Branch 为能够包含子节点的节点如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为;
Comment 定义了XML注释的行为;
Document定义了XML文档;
DocumentType定义XML DOCTYPE声明;
Element定义XML元素
Entity定义XML entity;
Node为所有的dom4j中XML节点定义了多态行为;
Text定义XML文本节点;
Visitor用于实现Visitor模式;
读写XML文档主要依赖于org.dom4j.io包,其中提供DOMReader和SAXReader两类不同方式,而调用方式是一样的。
public Document read(String fileName)throws MalformedURLException, DocumentException
{
SAXReader reader = new SAXReader();
Document document = reader.read(new File(fileName)); return document;
}
其中,reader的read方法是重载的,可以从InputStream,File,Url等多种不同的源来读取。得到的Document对象就代表了整个XML。
读取后的第二步,就是得到Root节点。熟悉XML的人都知道,一切XML分析都是从Root元素开始的。
public Element getRootElement(Document doc){
return doc.getRootElement();
}
dom4j提供至少3种遍历节点的方法:枚举、递归、Visitor模式。本次设计采用枚举法:
// 枚举所有子节点
for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
Element element = (Element) i.next();
// do something
}
// 枚举名称为foo的节点
for ( Iterator i = root.elementIterator(foo); i.hasNext();) {
Element foo = (Element) i.next();
// do something
}
// 枚举属性
for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {
Attribute attribute = (Attribute) i.next();
// do something
}
2.4 XML
XML即可扩展标记语言,是标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言[10]。
在信息保存方面,XML有着自己独特的优势。现代社会的绝大部分资料都是以电子文档形式保存的,并且不同格式保存的文档需要有相应的不同软件来将其打开。若干年后,很可能某些电子文档还在,但能够打 开这些文档的软件则已遭淘汰而无法找到。此外,许多电子文档基本上是完好的,但哪怕仅有几个二进制位的错误就将导致整个文档不能打开。相比之下,以XML 格式保存的文档就不会有上述问题。因为XML文档是基于文本的,并且文档中的每项数据都有清晰的语义,非常容易被打开和阅读。此外,XML文档能够很容易 地转换为其他格式的文档,所以非常适合用来作为信息的长期保存形式。
而且XML技术非常适合面向对象的程序开发。XML文档是非常容易阅读的,不但对人,对机器也是如此。XML文档数据的逻辑结构是一种树形的层次结构,文档中的每一个元素都可以影射为一个对象,同时也可以有相应的属性和方法,因而非常适合于使用面向对象的程序设计方式来开发处理这些XML文档的应用程序。在本项目中,应用XML文档来存储Petri网和待修复的序列。
2.5 测量时间的方法
在本次设计中借助System.currentTimeMillis()方法来测量程序执行时间。注意,这个程序执行时间指的是修复过程所用时间。在修复过程开始时和结束时分别调用该方法,把得到的时间相减得到运行时间。但是,由于所测时间与系统工作状态有着很大的关系,所以在实际操作过程中采用测量5次,除去最大和最小的两个值,对剩余3个值求平均值的方法。虽然这个方法得到的结果可能还是不够精确,但可以做到尽量接近。虽然通过这个方法测量的时间也许不能用于其它计算,但是可以通过这个数据来反应时间变化的趋势,可以用来作比较。测量时间时尽可能多地关闭无关的程序。 过程日志修复算法实现+文献综述(3):http://www.youerw.com/jisuanji/lunwen_19226.html