Dom4j完整教程
目录
1、DOM4J简介
DOM4J是 dom4j.org 出品的一个开源 XML 解析包。DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和 JAXP。
DOM4J 使用起来非常简单。只要你了解基本的 XML-DOM 模型,就能使用。
Dom:把整个文档作为一个对象。
DOM4J 最大的特色是使用大量的接口。它的主要接口都在org.dom4j里面定义:
| Attribute |
定义了 XML 的属性。 |
| Branch |
指能够包含子节点的节点。如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为 |
| CDATA |
定义了 XML CDATA 区域 |
| CharacterData |
是一个标识接口,标识基于字符的节点。如CDATA,Comment, Text. |
| Comment |
定义了 XML 注释的行为 |
| Document |
定义了XML 文档 |
| DocumentType |
定义 XML DOCTYPE 声明 |
| Element |
定义XML 元素 |
| ElementHandler |
定义了Element 对象的处理器 |
| ElementPath |
被 ElementHandler 使用,用于取得当前正在处理的路径层次信息 |
| Entity |
定义 XML entity |
| Node |
为dom4j中所有的XML节点定义了多态行为 |
| NodeFilter |
定义了在dom4j 节点中产生的一个滤镜或谓词的行为(predicate) |
| ProcessingInstruction |
定义 XML 处理指令 |
| Text |
定义 XML 文本节点 |
| Visitor |
用于实现 Visitor模式 |
| XPath |
在分析一个字符串后会提供一个 XPath 表达式 |
接口之间的继承关系如下:
interface java.lang.Cloneable
interface org.dom4j.Node
interface org.dom4j.Attribute
interface org.dom4j.Branch
interface org.dom4j.Document
interface org.dom4j.Element
interface org.dom4j.CharacterData
interface org.dom4j.CDATA
interface org.dom4j.Comment
interface org.dom4j.Text
interface org.dom4j.DocumentType
interface org.dom4j.Entity
interface org.dom4j.ProcessingInstruction
2、XML文档操作1
2.1、读取XML文档:
读写XML文档主要依赖于org.dom4j.io包,有DOMReader和SAXReader两种方式。因为利用了相同的接口,它们的调用方式是一样的。
-
-
public static Document load(String filename) { -
Document document = null; -
try { -
SAXReader saxReader = new SAXReader(); -
document = saxReader.read(new File(filename)); // 读取XML文件,获得document对象 -
} catch (Exception ex) { -
ex.printStackTrace(); -
} -
return document; -
} -
-
public static Document load(URL url) { -
Document document = null; -
try { -
SAXReader saxReader = new SAXReader(); -
document = saxReader.read(url); // 读取XML文件,获得document对象 -
} catch (Exception ex) { -
ex.printStackTrace(); -
} -
return document; -
}
-
//读取指定的xml文件之后返回一个Document对象,这个对象代表了整个XML文档,用于各种Dom运算。执照XML文件头所定义的编码来转换。
2.2、获取根节点
根节点是xml分析的开始,任何xml分析工作都需要从根开始
-
Xml xml = new Xml(); -
-
Document dom = xml.load(path + "/" + file); -
-
Element root = dom.getRootElement();
2.3、. 新增一个节点以及其下的子节点与数据
-
Element menuElement = root.addElement("menu"); -
-
Element engNameElement = menuElement.addElement("engName"); -
-
engNameElement.setText(catNameEn); -
-
Element chiNameElement = menuElement.addElement("chiName"); -
-
chiNameElement.setText(catName);
2.4、 写入XML文件
注意文件操作的包装类是乱码的根源
-
public static boolean doc2XmlFile(Document document, String filename) { -
boolean flag = true; -
try { -
XMLWriter writer = new XMLWriter(new OutputStreamWriter( -
new FileOutputStream(filename), "UTF-8")); -
writer.write(document); -
writer.close(); -
} catch (Exception ex) { -
flag = false; -
ex.printStackTrace(); -
} -
System.out.println(flag); -
return flag; -
}
Dom4j通过XMLWriter将Document对象表示的XML树写入指定的文件,并使用OutputFormat格式对象指定写入的风格和编码方法。调用OutputFormat.createPrettyPrint()方法可以获得一个默认的pretty print风格的格式对象。对OutputFormat对象调用setEncoding()方法可以指定XML文件的编码方法。
-
public void writeTo(OutputStream out, String encoding) -
throws UnsupportedEncodingException, IOException { -
OutputFormat format = OutputFormat.createPrettyPrint(); -
-
format.setEncoding("gb2312"); -
-
XMLWriter writer = new XMLWriter(System.out, format); -
-
writer.write(doc); -
-
writer.flush(); -
-
return; -
-
}
2. 5、 遍历xml节点
对Document对象调用getRootElement()方法可以返回代表根节点的Element对象。拥有了一个Element对象后,可以对该对象调用elementIterator()方法获得它的子节点的Element对象们的一个迭代器。使用(Element)iterator.next()方法遍历一个iterator并把每个取出的元素转化为Element类型。
-
public boolean isOnly(String catNameEn, HttpServletRequest request, -
String xml) { -
boolean flag = true; -
String path = request.getRealPath(""); -
Document doc = load(path + "/" + xml); -
Element root = doc.getRootElement(); -
for (Iterator i = root.elementIterator(); i.hasNext();) { -
Element el = (Element) i.next(); -
if (catNameEn.equals(el.elementTextTrim("engName"))) { -
flag = false; -
break; -
} -
} -
return flag; -
}
2.6、创建xml文件
-
public static void main(String args[]) { -
-
String fileName = "c:/text.xml"; -
-
Document document = DocumentHelper.createDocument();// 建立document对象,用来操作xml文件 -
-
Element booksElement = document.addElement("books");// 建立根节点 -
-
booksElement.addComment("This is a test for dom4j ");// 加入一行注释 -
-
Element bookElement = booksElement.addElement("book");// 添加一个book节点 -
-
bookElement.addAttribute("show", "yes");

本文是关于DOM4J的详细教程,涵盖了XML文档的读取、根节点获取、节点与属性操作、写入XML文件、字符串与XML的相互转换,以及DOM4J的事件处理模型和XPath查询。DOM4J是一个强大的XML处理包,提供DOM、SAX和JAXP的支持,并且使用Java集合框架,方便XML操作。

4765

被折叠的 条评论
为什么被折叠?



