JDOM操作XML

本文介绍如何利用JDOM库在Java环境中创建、读取和追加XML文件内容。通过具体代码示例展示了如何构建XML文档、读取XML节点数据以及在现有XML文件末尾追加新的节点。

一、配置环境

http://www.jdom.org 下载jdom-X.X.zip包(目前最新的为jdom-1.1.zip),解压后进入build文件夹将看到一个名为jdom.jar的包,这个就是jdom的类包了,将它加到你的classpath里即可。

二、源代码

  1. package com.xml;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream; 
  5. import java.io.IOException; 
  6. import java.io.PrintWriter;
  7. import java.util.List;
  8. import org.jdom.Document; 
  9. import org.jdom.Element; 
  10. import org.jdom.JDOMException;
  11. import org.jdom.input.SAXBuilder;
  12. import org.jdom.output.Format;
  13. import org.jdom.output.XMLOutputter;  
  14. public class test {
  15.     //创建XML
  16.     public void BuildXMLDoc() throws IOException, JDOMException {
  17.         // 创建根节点 root; 
  18.         Element root = new Element("list");
  19.         // 根节点添加到文档中;
  20.         Document Doc = new Document(root);
  21.         // 此处 for 循环可替换成 遍历 数据库表的结果集操作; 
  22.         for (int i = 0; i < 3; i++) {
  23.             // 创建节点 user; 
  24.             Element elements = new Element("user");
  25.             // 给 user 节点添加属性 id; 
  26.             elements.setAttribute("id""" + i);
  27.             // 给 user 节点添加子节点并赋值;           
  28.             elements.addContent(new Element("name").setText("潘永刚"));
  29.             elements.addContent(new Element("age").setText("28"));
  30.             elements.addContent(new Element("email").setText("pygsky@126.com"));
  31.             // 给父节点list添加user子节点; 
  32.             root.addContent(elements);      
  33.         }
  34.         //定义输出 
  35.         XMLOutputter XMLOut = new XMLOutputter();
  36.         //设置格式
  37.         Format format = Format.getPrettyFormat(); 
  38.         format.setEncoding("gb2312"); //设置xml文件的字符为gb2312 
  39.         format.setIndent("    "); //设置xml文件的缩进为4个空格         
  40.         
  41.         XMLOut.setFormat(format);
  42.         // 输出 user.xml 文件; 
  43.         XMLOut.output(Doc, new FileOutputStream("user.xml"));
  44.     }
  45.     
  46.     @SuppressWarnings("unchecked")
  47.     //读XML节点数据
  48.     public void ReadXMLDoc() throws IOException, JDOMException {
  49.         /*************将user.xml个别节点读出显示*****************/
  50.         File fn = new File("user.xml");   
  51.         Document doc = null
  52.         //建立构造器
  53.         SAXBuilder sb = new SAXBuilder();  
  54.         //判断文件是否存在
  55.         if (fn.exists()) {
  56.             try {
  57.               //读入指定文件
  58.                 doc = sb.build(new FileInputStream("user.xml"));
  59.             } catch (Exception e) {
  60.                 System.out.println(e.getMessage());
  61.             }
  62.             //获得根结点
  63.             Element root = doc.getRootElement();
  64.             //将根结点下的所有子节点放入List中
  65.             List list = root.getChildren();
  66.             for (int i = 0; i < list.size(); i++) {
  67.                 System.out.println("-----------------------");
  68.                 //取得节点实例
  69.                 Element item = (Element)list.get(i);
  70.                 //取得当前节点的子节点
  71.                 String sid = item.getAttribute("id").getValue();//取得属性值
  72.                 System.out.println("id----> " + sid);
  73.                 
  74.                 Element Name = item.getChild("name");
  75.                 String sname = Name.getText();// 取得当前节点的值
  76.                 System.out.println("Name---->" + sname);
  77.             }
  78.         } else {
  79.             System.out.println("Not   found   child   element!");
  80.         }  
  81.         
  82.         
  83.         /* 将user.xml内容在控制台显示
  84.         //建立构造器
  85.         SAXBuilder builder = new SAXBuilder();
  86.         Document doc = null;
  87.        //读入指定文件
  88.         doc = builder.build(new FileInputStream("user.xml"));
  89.         XMLOutputter fmt = new XMLOutputter();      
  90.         Format format = Format.getPrettyFormat();
  91.         format.setEncoding("gb2312"); //设置xml文件的字符为gb2312
  92.         format.setIndent("    "); //设置xml文件的缩进为4个空格 
  93.         fmt.setFormat(format);
  94.         PrintWriter out=new PrintWriter(System.out); //不加 中文会乱码
  95.         fmt.output(doc, out);*/     
  96.         
  97.     }
  98.     
  99.     @SuppressWarnings("unchecked")
  100.     //在XML文件尾部追加
  101.     public void AddXMLDoc() throws IOException, JDOMException {
  102.         File fn = new File("user.xml");   
  103.         Document doc = null;   
  104.         SAXBuilder sb = new SAXBuilder();   
  105.         //如果文件存在
  106.         if(fn.exists()){   
  107.             try{   
  108.                 doc = sb.build(new FileInputStream("user.xml"));   
  109.             }catch(Exception   e){   
  110.                 System.out.println(e.getMessage());   
  111.             } 
  112.             
  113.             Element root = doc.getRootElement();
  114.             if (root.getContentSize() > 0) {                
  115.                 List list = root.getChildren();
  116.                 Element elements = new Element("user");
  117.                 // 给 user 节点添加属性 id;
  118.                 elements.setAttribute("id""" + list.size());
  119.                 elements.addContent(new Element("name").setText("刘德华"));
  120.                 elements.addContent(new Element("age").setText("48"));
  121.                 elements.addContent(new Element("email").setText("AndyLiu@126.com"));
  122.                 // 给父节点list添加user子节点;
  123.                 root.addContent(elements);
  124.                 // 设置输出格式
  125.                 Format f = Format.getPrettyFormat();
  126.                 f.setIndent("   ");
  127.                 f.setEncoding("gb2312");
  128.                 XMLOutputter output = new XMLOutputter(f);
  129.                 try {
  130.                     output.output(doc, new FileOutputStream("user.xml"));
  131.                 } catch (Exception e) {
  132.                     System.out.println(e.getMessage());
  133.                 }
  134.             } 
  135.             //如果文件不存在
  136.             else { 
  137.                 System.out.println("Not   found   child   element!");
  138.             }  
  139.          
  140.         }
  141.         else
  142.         {
  143.             System.out.println("找不到指定的文件!"); 
  144.         }
  145.     }       
  146.     
  147.     /**
  148.      * @param args
  149.      */
  150.     public static void main(String[] args) {
  151.            try { 
  152.                test j2x = new test(); 
  153.                //j2x.BuildXMLDoc(); //创建
  154.                //j2x.AddXMLDoc(); //追加
  155.                j2x.ReadXMLDoc();//读取
  156.            } catch (Exception e) { 
  157.                e.printStackTrace(); 
  158.            }
  159.     }
  160. }

三、XML文件操作结果

1、创建的user.xml

  1. <?xml version="1.0" encoding="gb2312"?>
  2. <list>
  3.     <user id="0">
  4.         <name>潘永刚</name>
  5.         <age>28</age>
  6.         <email>pygsky@126.com</email>
  7.     </user>
  8.     <user id="1">
  9.         <name>潘永刚</name>
  10.         <age>28</age>
  11.         <email>pygsky@126.com</email>
  12.     </user>
  13.     <user id="2">
  14.         <name>潘永刚</name>
  15.         <age>28</age>
  16.         <email>pygsky@126.com</email>
  17.     </user>
  18. </list>

2追加后的user.xml

  1. <?xml version="1.0" encoding="gb2312"?>
  2. <list>
  3.    <user id="0">
  4.       <name>潘永刚</name>
  5.       <age>28</age>
  6.       <email>pygsky@126.com</email>
  7.    </user>
  8.    <user id="1">
  9.       <name>潘永刚</name>
  10.       <age>28</age>
  11.       <email>pygsky@126.com</email>
  12.    </user>
  13.    <user id="2">
  14.       <name>潘永刚</name>
  15.       <age>28</age>
  16.       <email>pygsky@126.com</email>
  17.    </user>
  18.    <user id="3">
  19.       <name>刘德华</name>
  20.       <age>48</age>
  21.       <email>AndyLiu@126.com</email>
  22.    </user>
  23. </list>

3、查询在控制台显示的结果

-----------------------
id----> 0
Name---->潘永刚
-----------------------
id----> 1
Name---->潘永刚
-----------------------
id----> 2
Name---->潘永刚
-----------------------
id----> 3
Name---->刘德华

 

四、其他相关内容帖子链接

http://hi.baidu.com/bluesky0205/blog/item/aaac9ad49752e401a08bb74a.html

http://www.java3z.com/cwbwebhome/article/article2/2228.html?id=692

http://xiaobian.javaeye.com/blog/monthblog/2008-01?show_full=true

http://www.594k.com/java/html/y2007m4/13844/

http://dev.yesky.com/82/8205582.shtml

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值