您的位置:首页 > 编程语言

DOM4J介绍与代码示例(一)

2010-10-22 16:04 417 查看
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);}
st1\:*{behavior:url(#ieooui) }
DOM4J是dom4j.org出品的一个开源XML解析包。Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。
DOM4J下载jar包:http://downloads.sourceforge.net/dom4j/dom4j-1.6.1.jar
JAXEN(对XPath的支持):http://dist.codehaus.org/jaxen/distributions/jaxen-1.1.1.zip
1.DOM4J主要接口
DOM4J主要接口都在org.dom4j这个包里定义。



-Node为所有的dom4j中XML节点定义了多态行为;

-Branch为能够包含子节点的节点如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为;
|-Element 定义XML 元素;
|-Document定义了XML文档;

-DocumentType 定义XML DOCTYPE声明;
-Entity定义 XML entity;
-Attribute定义了XML的属性;
-ProcessingInstruction 定义 XML 处理指令;

-CharacterData是一个标识借口,标识基于字符的节点。如CDATA,Comment, Text;
|- CDATA 定义了XML CDATA 区域;
|-Text 定义XML 文本节点;
|- Comment 定义了XML注释的行为;
2.创建XML文档
示例xml:students.xml
[align=left]<?xml version="1.0" encoding="UTF-8"?> [/align]
[align=left]<?xml-stylesheet type="text/xsl" href="students.xsl"?>[/align]
[align=left]<students>[/align]
[align=left] <!--A Student Catalog-->[/align]
[align=left] <student sn="01">[/align]
[align=left] <name>sam</name>[/align]
[align=left] <age>18</age>[/align]
[align=left] </student>[/align]
[align=left] <student sn="02">[/align]
[align=left] <name>lin</name>[/align]
[align=left] <age>20</age>[/align]
[align=left] </student>[/align]
</students>
下面是用dom4j创建上述文档,通过两种方式创建,一种是调用dom4j提供的方法,一种是通过字符串转换。
XmlGen.java
[align=left]import java.io.File;[/align]
[align=left]import java.io.FileWriter;[/align]
[align=left]import java.io.IOException;[/align]
[align=left]import java.util.HashMap;[/align]
[align=left]import java.util.Map;[/align]
[align=left] [/align]
[align=left]import org.dom4j.Document;[/align]
[align=left]import org.dom4j.DocumentException;[/align]
[align=left]import org.dom4j.DocumentHelper;[/align]
[align=left]import org.dom4j.Element;[/align]
[align=left]import org.dom4j.io.XMLWriter;[/align]
[align=left] [/align]
[align=left]public class XmlGen {[/align]
[align=left] public Document generateDocumentByMethod() {[/align]
[align=left] Document document = DocumentHelper.createDocument();[/align]
[align=left] // ProcessingInstruction[/align]
[align=left] Map<String, String> inMap = new HashMap<String, String>();[/align]
[align=left] inMap.put("type", "text/xsl");[/align]
[align=left] inMap.put("href", "students.xsl");[/align]
[align=left] document.addProcessingInstruction("xml-stylesheet", inMap);[/align]
[align=left] // root element[/align]
[align=left] Element studentsElement = document.addElement("students");[/align]
[align=left] studentsElement.addComment("An Student Catalog");[/align]
[align=left] // son element[/align]
[align=left] Element stuElement = studentsElement.addElement("student");[/align]
[align=left] stuElement.addAttribute("sn", "01");[/align]
[align=left] Element nameElement = stuElement.addElement("name");[/align]
[align=left] nameElement.setText("sam");[/align]
[align=left] Element ageElement = stuElement.addElement("age");[/align]
[align=left] ageElement.setText("18");[/align]
[align=left] // son element[/align]
[align=left] Element anotherStuElement = studentsElement.addElement("student");[/align]
[align=left] anotherStuElement.addAttribute("sn", "02");[/align]
[align=left] Element anotherNameElement = anotherStuElement.addElement("name");[/align]
[align=left] anotherNameElement.setText("lin");[/align]
[align=left] Element anotherAgeElement = anotherStuElement.addElement("age");[/align]
[align=left] anotherAgeElement.setText("20");[/align]
[align=left] [/align]
[align=left] return document;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] public Document generateDocumentByString() {[/align]
[align=left] String text = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +[/align]
[align=left] "<?xml-stylesheet type=\"text/xsl\" href=\"students.xsl\"?>" +[/align]
[align=left] "<students><!--An Student Catalog--> <student sn=\"01\">" +[/align]
[align=left] "<name>sam</name><age>18</age></student><student sn=\"02\">" +[/align]
[align=left] "<name>lin</name><age>20</age></student></students>";[/align]
[align=left] Document document = null;[/align]
[align=left] try {[/align]
[align=left] document = DocumentHelper.parseText(text);[/align]
[align=left] } catch (DocumentException e) {[/align]
[align=left] e.printStackTrace();[/align]
[align=left] }[/align]
[align=left] return document;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] public void saveDocument(Document document, File outputXml) {[/align]
[align=left] try {[/align]
[align=left] // 美化格式[/align]
[align=left] OutputFormat format = OutputFormat.createPrettyPrint();[/align]
[align=left] /*// 缩减格式[/align]
[align=left] OutputFormat format = OutputFormat.createCompactFormat();*/[/align]
[align=left] /*// 指定XML编码[/align]
[align=left] format.setEncoding("GBK");*/[/align]
[align=left] XMLWriter output = new XMLWriter(new FileWriter(outputXml), format);[/align]
[align=left] output.write(document);[/align]
[align=left] output.close();[/align]
[align=left] } catch (IOException e) {[/align]
[align=left] System.out.println(e.getMessage());[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] public static void main(String[] argv) {[/align]
[align=left] XmlGen dom4j = new XmlGen();[/align]
[align=left] Document document = null;[/align]
[align=left] // document=dom4j.generateDocumentByMethod();[/align]
[align=left] document = dom4j.generateDocumentByString();[/align]
[align=left] dom4j.saveDocument(document, new File("output.xml"));[/align]
[align=left] }[/align]
[align=left]}[/align]
方法generateDocumentByMethod()通过调用方法构建xml文档:
1.使用DocumentHelper得到Document实例
Document document = DocumentHelper.createDocument();
2.创建Processing Instruction
document.addProcessingInstruction("xml-stylesheet", inMap);
3.创建元素Element
Element studentsElement = document.addElement("students");
4.为元素添加注释Comment
studentsElement.addComment("An Student Catalog");
5.为元素添加属性
studentsElement.addComment("An Student Catalog");
6.为元素添加文本值Text
ageElement.setText("18");

方法generateDocumentByString()通过字符串转换直接构建xml文档,使用DocumentHelper.parseText()来实现.
[align=left]document = DocumentHelper.parseText(text);[/align]

方法saveDocument(Document document, File outputXml)将文档输出到文件保存,可指定字符编码,可指定格式化输出。
3.修改XML文档
这里使用xpath来定位待修改的元素和属性,需要jaxen的支持。
示例中将students-gen.xml的第一个student元素的sn属性改为001,其子元素name内容改为jeff。
XmlMod.java
[align=left]import java.io.File;[/align]
[align=left]import java.io.FileWriter;[/align]
[align=left]import java.io.IOException;[/align]
[align=left]import java.util.Iterator;[/align]
[align=left]import java.util.List;[/align]
[align=left] [/align]
[align=left]import org.dom4j.Attribute;[/align]
[align=left]import org.dom4j.Document;[/align]
[align=left]import org.dom4j.DocumentException;[/align]
[align=left]import org.dom4j.Element;[/align]
[align=left]import org.dom4j.io.SAXReader;[/align]
[align=left]import org.dom4j.io.XMLWriter;[/align]
[align=left] [/align]
[align=left]public class XmlMod {[/align]
[align=left] public void modifyDocument(File inputXml) {[/align]
[align=left] try {[/align]
[align=left] SAXReader saxReader = new SAXReader();[/align]
[align=left] Document document = saxReader.read(inputXml);[/align]
[align=left] List list = document.selectNodes("//students/student/@sn");[/align]
[align=left] Iterator iter = list.iterator();[/align]
[align=left] while (iter.hasNext()) {[/align]
[align=left] Attribute attribute = (Attribute) iter.next();[/align]
[align=left] if (attribute.getValue().equals("01"))[/align]
[align=left] attribute.setValue("001");[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] list = document.selectNodes("//students/student");[/align]
[align=left] iter = list.iterator();[/align]
[align=left] while (iter.hasNext()) {[/align]
[align=left] Element element = (Element) iter.next();[/align]
[align=left] Iterator iterator = element.elementIterator("name");[/align]
[align=left] while (iterator.hasNext()) {[/align]
[align=left] Element nameElement = (Element) iterator.next();[/align]
[align=left] if (nameElement.getText().equals("sam"))[/align]
[align=left] nameElement.setText("jeff");[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] XMLWriter output = new XMLWriter(new FileWriter(new File([/align]
[align=left] "students-modified.xml")));[/align]
[align=left] output.write(document);[/align]
[align=left] output.close();[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] catch (DocumentException e) {[/align]
[align=left] System.out.println(e.getMessage());[/align]
[align=left] } catch (IOException e) {[/align]
[align=left] System.out.println(e.getMessage());[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] public static void main(String[] argv) {[/align]
[align=left] XmlMod dom4jParser = new XmlMod();[/align]
[align=left] dom4jParser.modifyDocument(new File("students-gen.xml"));[/align]
[align=left] }[/align]
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: