posts - 5,  comments - 7,  trackbacks - 0

在项目中,我们很多都用到了xml文件,无论是参数配置还是与其它系统的数据交互。
今天就来讲一下Java 中使用dom4j来操作XML文件。

我们需要引入的包:

 1//文件包 
 2import java.io.ByteArrayOutputStream; 
 3import
 java.io.File; 
 4import
 java.io.FileWriter; 
 5//工具包 

 6import java.util.Iterator; 
 7import
 java.util.List; 
 8//dom4j包 

 9import org.dom4j.Attribute; 
10import
 org.dom4j.Document; 
11import
 org.dom4j.DocumentHelper; 
12import
 org.dom4j.Element; 
13import
 org.dom4j.io.OutputFormat; 
14import
 org.dom4j.io.SAXReader; 
15import org.dom4j.io.XMLWriter;
1、将XML文件的内容转化为String
 1   /** 
 2
    * doc2String 
 3
    * 将xml文档内容转为String 
 4    * @return
 字符串 
 5    * @param
 document 
 6    */
 
 7   public static
 String doc2String(Document document) 
 8   

 9      String s = ""

10      try
 
11      

12           //使用输出流来进行转化 

13           ByteArrayOutputStream out = new ByteArrayOutputStream(); 
14           //使用GB2312编码 

15           OutputFormat format = new OutputFormat("  "true"GB2312"); 
16           XMLWriter writer = new
 XMLWriter(out, format); 
17
           writer.write(document); 
18           s = out.toString("GB2312"
); 
19      }
catch(Exception ex) 
20      
{             
21
           ex.printStackTrace(); 
22      }
       
23      return
 s; 
24   }

2、将符合XML格式的String 转化为XML Document
 1 /** 
 2
    * string2Document 
 3
    * 将字符串转为Document 
 4    * @return
  
 5    * @param
 s xml格式的字符串 
 6    */
 
 7   public static
 Document string2Document(String s) 
 8   

 9      Document doc = null

10      try
 
11      

12           doc =
 DocumentHelper.parseText(s); 
13      }
catch(Exception ex) 
14      
{             
15
           ex.printStackTrace(); 
16      }
 
17      return
 doc; 
18   }
3、将Document对象保存为一个xml文件到本地
 1   /** 
 2
    * doc2XmlFile 
 3
    * 将Document对象保存为一个xml文件到本地 
 4    * @return
 true:保存成功  flase:失败 
 5    * @param
 filename 保存的文件名 
 6    * @param
 document 需要保存的document对象 
 7    */
 
 8   public static boolean
 doc2XmlFile(Document document,String filename) 
 9   

10      boolean flag = true

11      try
 
12      

13            /* 将document中的内容写入文件中 */
 
14            //默认为UTF-8格式,指定为"GB2312" 

15            OutputFormat format = OutputFormat.createPrettyPrint(); 
16            format.setEncoding("GB2312"
); 
17            XMLWriter writer = new XMLWriter(new FileWriter(new
 File(filename)),format); 
18
            writer.write(document); 
19
            writer.close();             
20        }
catch(Exception ex) 
21        

22            flag = false

23
            ex.printStackTrace(); 
24        }
 
25        return
 flag;       
26   }

4、将xml格式的字符串保存为本地文件,如果字符串格式不符合xml规则,则返回失败

 1/** 
 2
    * string2XmlFile 
 3
    * 将xml格式的字符串保存为本地文件,如果字符串格式不符合xml规则,则返回失败 
 4    * @return
 true:保存成功  flase:失败 
 5    * @param
 filename 保存的文件名 
 6    * @param
 str 需要保存的字符串 
 7    */
 
 8   public static boolean
 string2XmlFile(String str,String filename) 
 9   

10      boolean flag = true

11      try
 
12      

13         Document doc =
  DocumentHelper.parseText(str);        
14         flag =
 doc2XmlFile(doc,filename); 
15      }
catch (Exception ex) 
16      

17         flag = false

18
         ex.printStackTrace(); 
19      }
 
20      return
 flag; 
21   }

5、载入一个xml文档
 1 /** 
 2
    * load 
 3
    * 载入一个xml文档 
 4    * @return
 成功返回Document对象,失败返回null 
 5    * @param
 uri 文件路径 
 6    */
 
 7   public static
 Document load(String filename) 
 8   

 9      Document document = null

10      try
  
11      
{  
12          SAXReader saxReader = new
 SAXReader(); 
13          document = saxReader.read(new
 File(filename)); 
14      }
 
15      catch (Exception ex)

16
          ex.printStackTrace(); 
17      }
   
18      return
 document; 
19   }

 6、演示String保存为xml文件
 1  /** 
 2
    * xmlWriteDemoByString 
 3
    * 演示String保存为xml文件 
 4    */
 
 5   public void
 xmlWriteDemoByString() 
 6   

 7      String s = ""

 8      /** xml格式标题 "<?xml version='1.0' encoding='GB2312'?>" 可以不用写*/
 
 9      s = "<config>\r\n"
 
10         +"   <ftp name='DongDian'>\r\n"
 
11         +"     <ftp-host>127.0.0.1</ftp-host>\r\n"
 
12         +"     <ftp-port>21</ftp-port>\r\n"
 
13         +"     <ftp-user>cxl</ftp-user>\r\n"
 
14         +"     <ftp-pwd>longshine</ftp-pwd>\r\n"
 
15         +"     <!-- ftp最多尝试连接次数 -->\r\n"
 
16         +"     <ftp-try>50</ftp-try>\r\n"
 
17         +"     <!-- ftp尝试连接延迟时间 -->\r\n"
 
18         +"     <ftp-delay>10</ftp-delay>\r\n"
 
19         +"  </ftp>\r\n"
 
20         +"</config>\r\n"

21      //将文件生成到classes文件夹所在的目录里    

22      string2XmlFile(s,"xmlWriteDemoByString.xml");    
23      //将文件生成到classes文件夹里    

24      string2XmlFile(s,"classes/xmlWriteDemoByString.xml");   
25   }

7、演示手动创建一个Document,并保存为XML文件
 1 /** 
 2
    * 演示手动创建一个Document,并保存为XML文件 
 3    */
 
 4   public void
 xmlWriteDemoByDocument() 
 5   

 6        /** 建立document对象 */
 
 7        Document document =
 DocumentHelper.createDocument(); 
 8        /** 建立config根节点 */
 
 9        Element configElement = document.addElement("config"
); 
10        /** 建立ftp节点 */
 
11        configElement.addComment("东电ftp配置"
); 
12        Element ftpElement = configElement.addElement("ftp"
); 
13        ftpElement.addAttribute("name","DongDian"
); 
14        /** ftp 属性配置 */
 
15        Element hostElement = ftpElement.addElement("ftp-host"
); 
16        hostElement.setText("127.0.0.1"
); 
17        (ftpElement.addElement("ftp-port")).setText("21"
); 
18        (ftpElement.addElement("ftp-user")).setText("cxl"
); 
19        (ftpElement.addElement("ftp-pwd")).setText("longshine"
); 
20        ftpElement.addComment("ftp最多尝试连接次数"
); 
21        (ftpElement.addElement("ftp-try")).setText("50"
); 
22        ftpElement.addComment("ftp尝试连接延迟时间"
); 
23        (ftpElement.addElement("ftp-delay")).setText("10"
);     
24        /** 保存Document */
 
25        doc2XmlFile(document,"classes/xmlWriteDemoByDocument.xml"
); 
26   }

8、演示读取文件的具体某个节点的值

 1   /** 
 2
    *  演示读取文件的具体某个节点的值  
 3    */
 
 4   public static void
 xmlReadDemo() 
 5   

 6      Document doc = load("classes/xmlWriteDemoByDocument.xml"
); 
 7      //Element root = doc.getRootElement(); 

 8      /** 先用xpath查找所有ftp节点 并输出它的name属性值*/ 
 9      List list = doc.selectNodes("/config/ftp"
 ); 
10      Iterator it =
 list.iterator(); 
11      while
(it.hasNext()) 
12      
{    
13          Element ftpElement =
 (Element)it.next(); 
14          System.out.println("ftp_name="+ftpElement.attribute("name"
).getValue()); 
15      }
 
16      /** 直接用属性path取得name值 */
 
17      list = doc.selectNodes("/config/ftp/@name"
 ); 
18      it =
 list.iterator(); 
19      while
(it.hasNext()) 
20      
{    
21          Attribute attribute =
 (Attribute)it.next(); 
22          System.out.println("@name="+
attribute.getValue()); 
23      }
 
24      /** 直接取得DongDian ftp的 ftp-host 的值 */
 
25      list = doc.selectNodes("/config/ftp/ftp-host"
 ); 
26      it =
 list.iterator(); 
27      Element hostElement=
(Element)it.next(); 
28      System.out.println("DongDian's ftp_host="+
hostElement.getText()); 
29   }

9、修改或删除某个值或属性

1/** ftp节点删除ftp-host节点 */ 
2
ftpElement.remove(hostElement);  
3/** ftp节点删除name属性 */
 
4
ftpElement.remove(nameAttribute); 
5/** 修改ftp-host的值 */
 
6hostElement.setText("192.168.0.1"
);  
7/** 修改ftp节点name属性的值 */
 
8nameAttribute.setValue("ChiFeng");
posted on 2008-11-25 08:45 Vincent-chen 阅读(348) 评论(0)  编辑  收藏 所属分类: XML

只有注册用户登录后才能发表评论。


网站导航: