【零碎JAVA】Dom4J

DOM4J是一套简单的,灵活的,基于DOM技术的,用于解析xml的开源框架。他提供了一系列用于解析,操作xml的方法,我们可以从http://sourceforge.net/projects/dom4j上下载最新版的dom4j-1.6.1,下载后将其解压,有如下的目录结构,

其中,docs目录下是dom4j-1.6.1的api文档,src下是dom4j-1.6.1的源码,dom4j-1.6.1.jar是我们需要的jar包,里面包含了dom4j一系列供我们使用的内容。

在我们打开docs目录下的index.html文件时,网页左侧的Quick Start 可以帮助我们对快速上手dom4j。


一.dom4j的使用

        1.首先我们需要在eclipse中创建我们的工程,此处不再详细介绍。

        2.右击我们创建的工程,选择Build Path -> Configure Build Path

       

         3.选中Libraries标签,点击Add External JARs...按钮,将我们上面介绍的dom4j-1.6.1.jar添加进来

        

         4.这样一切准备就绪,我们就可以使用dom4j了。


二.创建xml文档

        创建xml文档主要是通过dom4j给我们提供的Document对象来实现的,可以通过以下方式获得Document的实例,

        Document document = DocumentHelper.createDocument();

        DocumentHelper相当于Document的工厂类,阅读源码我们会发现,DocumentHelper.createDocument();其实调用的是DocumentFactory.getInstance();

        获取到document的实例后,我们可以通过document.addComment, document.addElement(), document.addAttribute等操作来为xml添加注释,节点,属性等内容

        我们以创建这段xml文本内容为例:

           <catalog> 
		<!--An XML Catalog--> 
  		<journal title="XML Zone" 
                 publisher="IBM developerWorks"> 
			<article level="Intermediate" date="December-2001">
 				<title>Java configuration with XML Schema</title> 
 				<author> 
     				<firstname>Marcello</firstname> 
     				<lastname>Vitaletti</lastname> 
 				</author>
  			</article>
  		</journal> 
	   </catalog>

        他的实现代码如下所示:    
 Document document = DocumentHelper.createDocument();
		Element rootElement = document.addElement("catalog");
		//添加注释<!-- An XML Catalog -->
		rootElement.addComment("An XML Catalog");
		//添加journal节点<journal></journal>
		Element journalElement = rootElement.addElement("journal");
		//为<journal>节点添加属性
		journalElement.addAttribute("title", "XML ZONE");
		journalElement.addAttribute("publisher", "IBM developerWorks");
		
		Element articleElement = journalElement.addElement("article");
		articleElement.addAttribute("level", "Intermediate");
		articleElement.addAttribute("date", "December-2001");
		
		Element titleElement = articleElement.addElement("title");
		titleElement.setText("Java configuration with XML Schema");
		
		Element authorElement = articleElement.addElement("author");
		Element firstnameElement = authorElement.addElement("firstname");
		firstnameElement.setText("Marcello");
		Element lastnameElement = authorElement.addElement("lastname");
		lastnameElement.setText("Vitaletti");
		
		//将document对象转换成String字符串
		String str = document.asXML();
		System.out.println(str);
		
		try {
			/*
			 * 将document写入指定的文件catagory.xml
			 */
			XMLWriter writer = new XMLWriter(new FileWriter("catagory.xml"));
			writer.write(document);
			writer.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

三.遍历xml文本,即属性更改

        要遍历xml文本,必须要读取,并解析xml文本的内容,我们可以通过如下方式,将xml文本实例化成一个Document对象,并将document对象中的内容遍历,打印各个节点的名字与属性。代码如下:

try {
			SAXReader reader = new SAXReader();
			Document document = reader.read(new File("catagory.xml"));
			
			//获取根节点
			Element rootElement = document.getRootElement();
			System.out.println(rootElement.getName());	//
			for(Iterator iterator = rootElement.elementIterator(); iterator.hasNext(); ){
				//获取到journal节点
				Element element = (Element)iterator.next();
				System.out.println(element.getName());	//
				if(element.getName().equals("journal")){
					Attribute attr_title = element.attribute("title");
					System.out.println(attr_title.getName() + " === " + attr_title.getValue());
					Attribute attr_publisher = element.attribute("publisher");
					System.out.println(attr_publisher.getName() + " === " + attr_publisher.getValue());
					
					for(Iterator iter = element.elementIterator(); iter.hasNext(); ){
						//获取到article节点
						Element element2 = (Element)iter.next();	
						System.out.println(element2.getName());	//
						if(element2.getName().equals("article")){
							Attribute attr_level = element2.attribute("level");
							System.out.println(attr_level.getName() + " === " + attr_level.getValue());
							Attribute attr_date = element2.attribute("date");
							System.out.println(attr_date.getName() + " === " + attr_date.getValue());
						}
						
						for(Iterator iter2 = element2.elementIterator(); iter2.hasNext(); ){
							Element element3 = (Element)iter2.next();
							System.out.println(element3.getName());		//
							if(element3.getName().equals("title")){
								//获取到title节点
								System.out.println(element3.getText());
							}else if(element3.getName().equals("author")){
								//获取到author节点
								System.out.println(element3.element("firstname").getName() + " --- " + element3.element("firstname").getText());
								System.out.println(element3.element("lastname").getName() + " --- " + element3.element("lastname").getText());
							}
						}
						
					}
				}
			}
			
			
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	} 

他的运行结果如下,我们可以在获取到某个Element后通过set方法更改相关的值

       








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值