XML(eXtensibleMarkupLanguage)——可扩展标记语言,用户可以自己定义语言标记,只需要有开启和关闭标签即可。
在开发过程中,开发人员每天都在使用XML文件,但是如何操作读取这些文件呢?相关的技术有很多,例如传统的Dom、SAX和后来的JDOM、Dom4j等。 其实最先接触到的还是Dom4j,但是后来在学习中发现了JDOM,相比之下这两者还是挺相似的。下面就简单介绍一下JDOM。
JDOM主要是利用纯java技术对XML文档实现解析、生成、序列化以及多种操作的一个API函数。在 JDOM 中,XML 元素就是 Element 的实例,XML 属性就是 Attribute 的实例,XML 文档本身就是 Document 的实例。 下面是具体的操作:
首先需要准备jdom相关的jar包
jdom-jar下载地址:http://www.jdom.org/dist/binary/
其次需要引入相关jar包,这里我用的是jdom-1.1.3
一、使用JDOM方式创建XML文件
public class CreateXMLByJDOM { public static void main(String[] args ){ //创建Document实例 Document document = new Document(); //创建根元素ContactList,并创建属性 Element root = new Element("ContactList").setAttribute(new Attribute("Company","Acompany")); //根元素添加到Document对象中 document.addContent(root); //创建元素LinkMan Element contactPerson = new Element("LinkMan"); //添加元素到根元素中 root.addContent(contactPerson); //创建子元素 contactPerson.addContent(new Element("name").setText("雨落天涯")) .addContent(new Element("company").setText("创宇集团")) .addContent(new Element("Telphone").setText("13745628456")) .addContent(new Element("Address") .addContent(new Element("Street").setText("朝阳街")) .addContent(new Element("City").setText("北京市"))); //使用XMLOutputter生产xml文档 XMLOutputter xmlOut = new XMLOutputter(); try{ //调用XMLOutputter对象的output方法生成xml文档 xmlOut.output(document,new FileOutputStream("contact.xml")); System.out.println("Writing XML successed!"); }catch(FileNotFoundException e){ e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); } } }
生成 的XML文件 :
二、使用JDOM方式读取XML文件
先创建sample.xml文件
读取XML文件如下:
public class Sample { public static void main(String[] args) throws Exception { //创建一个SAXBuilder对象 SAXBuilder sb = new SAXBuilder(); //把整个文档当成一个对象 Document doc = sb.build(Sample2.class.getClassLoader().getResource("sample.xml")); //root拿到这个文档的根对象 Element root = doc.getRootElement(); System.out.println(root); //拿到根对象的HD/disk节点 List list = XPath.selectNodes(root, "/HD/disk"); System.out.println(list.size()); ////遍历根元素的子元素集合(即遍历list元素) for (int i = 0; i < list.size(); i++) { Element disk_element = (Element) list.get(i); String name = disk_element.getAttributeValue("name"); String capacity = ((Text) XPath.selectSingleNode(disk_element, "//disk[@name='" + name + "']/capacity/text()")) .getTextNormalize(); String directories = ((Text) XPath.selectSingleNode(disk_element, "//disk[@name='" + name + "']/directories/text()")) .getTextNormalize(); String files = ((Text) XPath.selectSingleNode(disk_element, "//disk[@name='" + name + "']/files/text()")) .getTextNormalize(); //输出显示XML数据 System.out.println("磁盘信息:"); System.out.println("分区盘符:" + name); System.out.println("分区容量:" + capacity); System.out.println("目录数:" + directories); System.out.println("文件数:" + files); System.out.println("-----------------------------------"); } } <span style="font-family:FangSong_GB2312;">}</span>
最终显示结果:
三、JDOM与DOM4j的比较 :
JDOM与DOM4j都是面向java语言开发的,JDOM是第一个java特定模型,所以在很多性能上很明显就比不上后来的DOM4j。例如第一,JDOM仅使用具体类而不使用接口。这在某些方面简化了API,但同时限制了灵活性。但DOM4J大量的使用了接口和抽象基本类方法。第二、JDOM自身不包含解析器,通常使用sax2解析器解析和验证输入XML文档。