dom4j 是一种解析 XML 文档的开放源代码 XML 框架。
参考google所有出来的关于dom4j的例子,自己学着写了两个范例,想用它来写文件存储器的索引文件。
1、首先下载dom4j的包,可以到
http://dom4j.sourceforge.net/网站下载。
2、创建Document。
| public Document createDocument(){
 Document document = DocumentHelper.createDocument();
 document.addComment("索引文件管理列表!");
 Element root = document.addElement( "Root" );
 
 Element sysDir1 = root.addComment("存储文件工作目录")
 .addElement( "SysDir" ).addText("C:\\document\\aa\\");
 for(int i = 0;i<5;i++)
 {
 String guid = "***"+i;
 Element task1 = root.addElement( "Task" );
 Element guid1 = task1.addElement("GUID").addText(guid);
 Element proir1 = task1.addElement("Proir").addText((i+2)+"");
 Element status1 = task1.addElement("Status").addText((i+5)+"");
 Element isSend1 = task1.addElement("IsSend").addText("true");
 }
 
 return document;
 }
 | 
3、生成XML文件。
| public boolean CreatXML(Document doc){
 boolean ret = false;
 try
 {
 //输出数据到XML文件中
 OutputFormat format = OutputFormat.createPrettyPrint();
 //xml文件字符集为GBK
 format.setEncoding("GBK");
 FileOutputStream fos = new FileOutputStream("d:\\content.xml");
 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos , "GBK"));
 XMLWriter writer = new XMLWriter(bw , format);
 writer.write(doc);
 bw.close();
 ret = true;
 }catch(Exception ex)
 {
 System.out.println(ex.toString());
 }
 return ret;
 }
 | 
4、读取XML文件。
| public Document read(String fileName) throws MalformedURLException, DocumentException {
 SAXReader reader = new SAXReader();
 Document document = reader.read(new File(fileName));
 return document;
 }
 | 
5、测试例子
| public static void main(String s[]){
 dom4jmain xml=new dom4jmain();
 Document doc = xml.createDocument();
 xml.CreatXML(doc);
 
 try
 {
 Document doc1 = xml.read("D:\\content.xml");
 Element root = xml.getRootElement(doc1);
 boolean isDel = false;
 for(int i =0; i < root.nodeCount(); i ++)
 {
 Node node = root.node(i);
 String nodexml = node.asXML();
 if(nodexml.trim().equals("")) continue;
 
 if (node instanceof Element)
 {
 if(node.getName().equals("Task"))
 {
 System.out.println("///////////////////////");
 System.out.println(node.asXML());
 Element enode = (Element)node;
 String guid = "";
 for(int j =0; j < enode.nodeCount(); j ++)
 {
 Node chnode = enode.node(j);
 nodexml = chnode.asXML();
 if(nodexml.trim().equals("")) continue;
 
 //获取GUID
 if(chnode.getName().equals("GUID"))
 {
 guid = chnode.getText();
 }
 
 //修改属性
 if(guid.equals("***1") && chnode.getName().equals("IsSend"))
 {
 chnode.setText("false");
 }
 
 //删除节点设置
 if(guid.equals("***2"))
 {
 isDel = true;
 }
 System.out.println("<Task>"+chnode.getName()+"="+chnode.getText());
 }
 }
 else if(node.getName().equals("SysDir"))
 {
 System.out.println("<SysDir>"+node.getName()+"="+node.getText());
 }
 }
 
 //删除节点
 if(isDel)
 {
 root.remove(node);
 isDel = false;
 }
 }
 
 //增加节点
 Element task1 = root.addElement( "Task" );
 Element guid1 = task1.addElement("GUID").addText("newguid");
 Element proir1 = task1.addElement("Proir").addText("0");
 Element status1 = task1.addElement("Status").addText("a");
 Element isSend1 = task1.addElement("IsSend").addText("true");
 
 xml.CreatXML(doc1);
 }
 catch(Exception ex)
 {}
 }
 | 
6、附:测试的两个文件,dom4jmain.java和dom4jtest.java
dom4jmain.java 文件。
| import org.dom4j.*;import org.dom4j.io.OutputFormat;
 import org.dom4j.io.XMLWriter;
 import org.dom4j.io.SAXReader;
 import java.io.*;
 import java.net.*;
 
 public class dom4jmain
 {
 public dom4jmain()
 {
 }
 
 public Document createDocument()
 {
 Document document = DocumentHelper.createDocument();
 document.addComment("索引文件管理列表!");
 Element root = document.addElement( "Root" );
 
 Element sysDir1 = root.addComment("存储文件工作目录")
 .addElement( "SysDir" ).addText("C:\\document\\aa\\");
 for(int i = 0;i<5;i++)
 {
 String guid = "***"+i;
 Element task1 = root.addElement( "Task" );
 Element guid1 = task1.addElement("GUID").addText(guid);
 Element proir1 = task1.addElement("Proir").addText((i+2)+"");
 Element status1 = task1.addElement("Status").addText((i+5)+"");
 Element isSend1 = task1.addElement("IsSend").addText("true");
 }
 
 return document;
 }
 
 public boolean CreatXML(Document doc)
 {
 boolean ret = false;
 try
 {
 //输出数据到XML文件中
 OutputFormat format = OutputFormat.createPrettyPrint();
 //xml文件字符集为GBK
 format.setEncoding("GBK");
 FileOutputStream fos = new FileOutputStream("d:\\content.xml");
 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos , "GBK"));
 XMLWriter writer = new XMLWriter(bw , format);
 writer.write(doc);
 bw.close();
 ret = true;
 }catch(Exception ex)
 {
 System.out.println(ex.toString());
 }
 return ret;
 }
 
 public Document read(String fileName) throws MalformedURLException, DocumentException
 {
 SAXReader reader = new SAXReader();
 Document document = reader.read(new File(fileName));
 return document;
 }
 
 public Element getRootElement(Document doc)
 {
 return doc.getRootElement();
 }
 }
 
 | 
dom4jtest.java 文件。
| import org.dom4j.Document;import org.dom4j.Element;
 import org.dom4j.Node;
 
 public class dom4jtest {
 public static void main(String s[])
 {
 dom4jmain xml=new dom4jmain();
 Document doc = xml.createDocument();
 xml.CreatXML(doc);
 
 try
 {
 Document doc1 = xml.read("D:\\content.xml");
 Element root = xml.getRootElement(doc1);
 boolean isDel = false;
 for(int i =0; i < root.nodeCount(); i ++)
 {
 Node node = root.node(i);
 String nodexml = node.asXML();
 if(nodexml.trim().equals("")) continue;
 
 if (node instanceof Element)
 {
 if(node.getName().equals("Task"))
 {
 System.out.println("///////////////////////");
 System.out.println(node.asXML());
 Element enode = (Element)node;
 String guid = "";
 for(int j =0; j < enode.nodeCount(); j ++)
 {
 Node chnode = enode.node(j);
 nodexml = chnode.asXML();
 if(nodexml.trim().equals("")) continue;
 
 //获取GUID
 if(chnode.getName().equals("GUID"))
 {
 guid = chnode.getText();
 }
 
 //修改属性
 if(guid.equals("***1") && chnode.getName().equals("IsSend"))
 {
 chnode.setText("false");
 }
 
 //删除节点设置
 if(guid.equals("***2"))
 {
 isDel = true;
 }
 System.out.println("<Task>"+chnode.getName()+"="+chnode.getText());
 }
 }
 else if(node.getName().equals("SysDir"))
 {
 System.out.println("<SysDir>"+node.getName()+"="+node.getText());
 }
 }
 
 //删除节点
 if(isDel)
 {
 root.remove(node);
 isDel = false;
 }
 }
 
 //增加节点
 Element task1 = root.addElement( "Task" );
 Element guid1 = task1.addElement("GUID").addText("newguid");
 Element proir1 = task1.addElement("Proir").addText("0");
 Element status1 = task1.addElement("Status").addText("a");
 Element isSend1 = task1.addElement("IsSend").addText("true");
 
 xml.CreatXML(doc1);
 }
 catch(Exception ex)
 {}
 }
 }
 
 | 
7、测试结果
打印出下面的输出结果,同时会在D:\下创建一个content.xml的文件。
| <SysDir>SysDir=C:\document\aa\///////////////////////
 <Task>
 <GUID>***0</GUID>
 <Proir>2</Proir>
 <Status>5</Status>
 <IsSend>true</IsSend>
 </Task>
 <Task>GUID=***0
 <Task>Proir=2
 <Task>Status=5
 <Task>IsSend=true
 ///////////////////////
 <Task>
 <GUID>***1</GUID>
 <Proir>3</Proir>
 <Status>6</Status>
 <IsSend>true</IsSend>
 </Task>
 <Task>GUID=***1
 <Task>Proir=3
 <Task>Status=6
 <Task>IsSend=false
 ///////////////////////
 <Task>
 <GUID>***2</GUID>
 <Proir>4</Proir>
 <Status>7</Status>
 <IsSend>true</IsSend>
 </Task>
 <Task>GUID=***2
 <Task>Proir=4
 <Task>Status=7
 <Task>IsSend=true
 ///////////////////////
 <Task>
 <GUID>***3</GUID>
 <Proir>5</Proir>
 <Status>8</Status>
 <IsSend>true</IsSend>
 </Task>
 <Task>GUID=***3
 <Task>Proir=5
 <Task>Status=8
 <Task>IsSend=true
 ///////////////////////
 <Task>
 <GUID>***4</GUID>
 <Proir>6</Proir>
 <Status>9</Status>
 <IsSend>true</IsSend>
 </Task>
 <Task>GUID=***4
 <Task>Proir=6
 <Task>Status=9
 <Task>IsSend=true
 
 | 
没有评论:
发表评论