首页 > 代码库 > JDOM解析XML

JDOM解析XML

    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文档。


JDOM解析XML