事情起因:昨天搞了个任务,转移代码,结果隔壁项目组用的是dom4j库,我们部件用的是jdom库,结果对于没搞过xml解析的还是有点难度,不过还好看代码还是大致能懂,不过两个库还是有点差异,下班在即就没搞,回来之后,想试下jdom库,于是广泛搜索资料整理一下,非常感谢那么多的贡献者,考虑到对于从未使用过的来说,貌似缺少一个足够详细的资料,于是整理了一下。
一、Jdom的下载和安装
可至jdom官网http://www.jdom.org下载,目前最新的是2.05,不过要是怀旧用了jdk1.2到1.4,也可以用1.1.3,不得不说,老外的开源软件的确是好。上次搞gcc2.85去编译raw的时候,发现那作者居然从1998年维护到2002年,不容易啊!
使用两个版本,区别只是导出包的时候,包名是org.jdom还是org.jdom2;下载后,将jdom.jar(2.05版为jdom-2.0.5.jar,解压后即可见到;1.1.3版为jdom-1.1.3.jar,解压后在build目录下),将jar文件放到一个可靠的位置,相对专业的位置是classpath,比如楼主参考放在了C:\Program Files\Java\jre6\lib\ext,实际上,这个位置可以任意,因为是需要添加jar文件路径工场的build path的,不过编程也需要专业一点,以及方便归档,所以建议还是放到lib/ext。至此,安装完毕
二、Jdom使用准备—生成XML文件
新建工程GenerateXML,并添加jar文件至工程build path,如图:
准备以下代码,代码抄自ltb6w
/* * 作者:ltb6w * blog:http://hi.baidu.com/ltb6w * 引用人:coder_xia */ package net.csdn.blog; import java.io.*; import org.jdom.*; import org.jdom.output.*; public class GenerateXML { public void BuildXML() throws Exception { Element root,student,number,name,age; root = new Element("student-info"); //生成根元素:student-info student = new Element("student"); //生成元素:student,该元素中将包含元素number,name,age number = new Element("number"); name = new Element("name"); age = new Element("age"); Document doc = new Document(root); //将根元素植入文档doc中 number.setText("001"); name.setText("lnman"); age.setText("24"); student.addContent(number); student.addContent(name); student.addContent(age); root.addContent(student); Format format = Format.getCompactFormat(); format.setEncoding("gb2312"); //设置xml文件的字符为gb2312 format.setIndent(" "); //设置xml文件的缩进为4个空格 XMLOutputter XMLOut = new XMLOutputter(format);//在元素后换行,每一层元素缩排四格 XMLOut.output(doc, new FileOutputStream("studentinfo.xml")); } public static void main(String[] args) throws Exception { GenerateXML w = new GenerateXML(); System.out.println("Now we build an XML document ....."); w.BuildXML(); System.out.println("finished!"); } }
不过此时eclipse会有报错:
Access restriction: The type Element is not accessible due to restriction on required library C:\Program Files\Java\jre6\lib\ext\jdom-1.1.3.jar
对于这个问题,删除build path里的JRE System Library再添加即可,Add Library——JRE System Library到如下界面选择
生成的xml文件内容如下:
<?xml version="1.0" encoding="gb2312"?> <student-info> <student> <number>001</number> <name>lnman</name> <age>24</age> </student> </student-info>
三、XML文件解析
新建XMLParse工程
/* * 作者:ltb6w * blog:http://hi.baidu.com/ltb6w * 引用人:coder_xia */ package net.csdn.blog; import org.jdom.input.*; import org.jdom.*; import java.util.*; public class XmlParse { public static void main(String[] args) throws Exception { SAXBuilder builder = new SAXBuilder(); Document read_doc = builder.build("studentinfo.xml"); Element stu = read_doc.getRootElement(); List list = stu.getChildren("student"); for(int i = 0;i < list.size();i++) { Element e = (Element)list.get(i); String str_number = e.getChildText("number"); String str_name = e.getChildText("name"); String str_age = e.getChildText("age"); System.out.println("---------STUDENT--------------"); System.out.println("NUMBER:" + str_number); System.out.println("NAME:" + str_name); System.out.println("AGE:" + str_age); System.out.println("------------------------------"); System.out.println(); } } }
搞定!
在读取xml文件时,记得dom4j有elementtext方法,直接获取每一个Element的属性值即可,而jdom的解析貌似都是从根节点开始再getChildText获取节点值,各有所长吧。
参考网址:
1、http://hi.baidu.com/ltb6w/item/3a5cf11926fda60ce75c361a
2、http://liuwentao.iteye.com/blog/59978