`
luhantu
  • 浏览: 204562 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java 解析XML dom4j

    博客分类:
  • Java
阅读更多

对于Java解析XML有很多种方法,不过用的最多应该就是dom4j了。先来无事,稍微研究一下它。

 

1.下载

下载地址:http://sourceforge.net/projects/dom4j

目前最高版本为1.6.1。

dom4j1.6.1的完整版大约11M,是一个名为dom4j-1.6.1.zip的压缩包,解压后有一个dom4j-1.6.1.jar文件,这就是应用时需要引入的类包,另外还需要引入jaxen-1.1-beta-6.jar文件,否则执行时可能抛java.lang.NoClassDefFoundError: org/jaxen/JaxenException异常,其他的包可以选择用之。

 

2.应用

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.CDATA;
import org.dom4j.Comment;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.DocumentType;
import org.dom4j.Element;
import org.dom4j.Namespace;
import org.dom4j.Node;
import org.dom4j.ProcessingInstruction;
import org.dom4j.Text;
import org.dom4j.VisitorSupport;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

/**
 * @author:kenny dong
 */
public class Dom4JDemo {

	/**
	 * @param args
	 * @throws DocumentException 
	 * @throws IOException 
	 */
	public static void main(String[] args) throws DocumentException, IOException {
		Dom4JDemo demo = new Dom4JDemo();
		Document doc = demo.read("D:/Demo.xml");
		//demo.IteratorAllElement(demo.getRootElement(doc));
		//demo.IteratorSpecialElement(demo.getRootElement(doc),"journal");
		//demo.IteratorAttribute(demo.getRootElement(doc));
		//demo.treeWalk(doc);
		//doc.accept(new MyVisitor());
		//demo.selectSingleNodeTest(doc);
		demo.writeToFile(demo.createDocument());
		demo.decorateOutputXML(demo.createDocument());

	}
	/**
	 * read from outside
	 * @param fileName
	 * @return
	 * @throws MalformedURLException
	 * @throws DocumentException
	 */
	public Document read(String fileName) throws MalformedURLException, DocumentException {
	       SAXReader reader = new SAXReader();
	       Document document = reader.read(new File(fileName));
	       return document;
	 }
	
	/**
	 * get root element
	 * @param doc
	 * @return
	 */
	 public Element getRootElement(Document doc){
	       return doc.getRootElement();
	  }
	 
	 /**
	  * iterator all element by iterator
	  * @param root
	  */
	 public void IteratorAllElement(Element root){
		 for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
		       Element element = (Element) i.next();
		       System.out.println(element.getName() + "\n" + element.asXML());
		   }
	 }
	 
	 /**
	  * iterator specail element by name
	  * @param root
	  * @param elementName
	  */
	 public void IteratorSpecialElement(Element root,String elementName){
		 for ( Iterator i = root.elementIterator(elementName); i.hasNext();) {
		       Element element = (Element) i.next();
		       System.out.println(element.getName() + "\n" + element.asXML());
		    }
	 }
	 
	 /**
	  * iterator all attributes
	  * @param root
	  */
	 public void IteratorAttribute(Element root){
		 for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {
		       Attribute attribute = (Attribute) i.next();
		       System.out.println(attribute.getName() + "\n" + attribute.asXML());
		    }
	 }
	 
	 /**
	  * iterator all elements by recursion
	  * @param doc
	  */
	 public void treeWalk(Document doc) {
	       treeWalk(getRootElement(doc));
	    }
	 public void treeWalk(Element element) {
	       for (int i = 0, size = element.nodeCount(); i < size; i++){
	           Node node = element.node(i);
	           if (node instanceof Element) {
	              treeWalk((Element) node);
	           } else {
	        	   System.out.println(node.asXML());
	           }
	       }
	}
	 
	 public void selectSingleNodeTest(Document doc){
		 Node node = doc.selectSingleNode("//journal/article");
		System.out.println("select single node " + node.asXML());
	 }
	 
	 public void selectNodesTest(Document document) {
	        List list = document.selectNodes("//journal/article" );
	        for(Object node : list){
	        	if(node instanceof Element){
	        		((Element) node).asXML();
	        	}
	        }
	   }
	 
	 public void findLinks(Document document) throws DocumentException {
	        List list = document.selectNodes("//a/@href");
	        for (Iterator iter = list.iterator(); iter.hasNext(); ) {
	            Attribute attribute = (Attribute) iter.next();
	            String url = attribute.getValue();
	            System.out.println("url " + url);
	        }
	     }
	 
	 public Document stringToDocument(String str) throws DocumentException{
		 return DocumentHelper.parseText(str);
	 }
	 
	 public Document createDocument() {
	       Document document = DocumentHelper.createDocument();// create docment
	       Element root = document.addElement("root");// create the root Element
           root.addElement("author")// create child Element
              .addAttribute("name", "James")// add attribute for the child Element
              .addAttribute("location", "UK")
              .addText("James Strachan")
              .addComment("This is the first author");// add text for the child Element
           
           root.addElement("author")
              .addAttribute("name", "Bob")
              .addAttribute("location", "US")
              .addText("Bob McWhirter");
           System.out.println(document.asXML());
	       return document;
	    }
	 
	 public void writeToFile(Document doc) throws IOException{
		 XMLWriter writer = new XMLWriter(new FileWriter("d:/output.xml"));
	      writer.write(doc);
	      writer.close();
	 }
	 
	 public void decorateOutputXML(Document doc) throws IOException{
		   FileWriter outputStream = new FileWriter("d:/output1.xml");
		   XMLWriter writer;
		   OutputFormat format;
	       format = OutputFormat.createPrettyPrint();//the default pretty printing format
	       //format = OutputFormat.createCompactFormat();//default compact format
	       //format = new OutputFormat("aaaa", false);// custom format
	       writer= new XMLWriter(outputStream, format );
	       writer.write(doc);
	       writer.close();
	 }
	 
	 public void moidfyXML(Document doc){
		 Element root = doc.getRootElement();
		 Attribute author = root.attribute("author");// select attribute
		 root.remove(author);// remove attribute
		 root.addAttribute("user", "user_kenny");// add new attribute
		 
	 }
}

class MyVisitor extends VisitorSupport {
    public void visit(Element element){
        System.out.println("element " + element.getName());
    }
    public void visit(Attribute attr){
        System.out.println("atrribute " + attr.getName());
    }
    
    public void visit(Node node){
    	 System.out.println("node " + node.asXML());
    }
    
    public void visit(Text text){
   	 System.out.println("text " + text.asXML());
   }
    
    public void visit(ProcessingInstruction pro){
    	 System.out.println("ProcessingInstruction " + pro.asXML());
    }
    
    
    public void visit(Namespace namespace){
   	 System.out.println("Namespace " + namespace.asXML());
   }
    
    public void visit(Comment comment){
      	 System.out.println("Comment " + comment.asXML());
      }
    
    public void visit(CDATA data){
     	 System.out.println("CDATA " + data.asXML());
     }
    
    public void visit(DocumentType docType){
     	 System.out.println("DocumentType " + docType.asXML());
     }
    
    
    public void visit(Document doc){
     	 System.out.println("Document " + doc.asXML());
     }
    
 }

 

 

分享到:
评论

相关推荐

    java解析XML dom4j dom4j-1.6.1.jar

    Java解析XML时,dom4j是一个非常流行的库,它提供了灵活且强大的API来处理XML文档。dom4j-1.6.1.jar是这个库的一个版本,发布于2005年,它支持XML的读取、写入、操作以及查询功能。在本文中,我们将深入探讨dom4j的...

    dom4j.jar包,java解析xml dom4j.jar包

    解析XML文件时,DOM4J提供了两种主要的方式:DOM阅读器和SAX阅读器。 - **DOM阅读器**:首先,通过`DocumentFactory.createDocument()`方法创建一个`Document`对象,然后使用`read()`方法读取XML文件,将整个XML...

    xmldom4j解析

    在“jar包执行20190331.rar”文件中,可能包含了一个Java项目,该项目使用DOM4J库解析XML文件并执行相关业务逻辑。执行此类项目通常涉及以下步骤: 1. 将jar包解压,找到主类(包含main方法)。 2. 使用Java命令行...

    java解析xml并导入数据库(dom4j).doc

    Java 解析 XML 并导入数据库(DOM4J) Java 解析 XML 并导入数据库是指使用 Java 语言将 XML 文件解析并将其内容导入到数据库中。下面是使用 DOM4J 库来实现此功能的相关知识点: 一、XML 文件解析 XML...

    Java使用sax、dom、dom4j解析xml文档

    Java提供了多种解析XML的API,包括SAX(Simple API for XML)、DOM(Document Object Model)以及DOM4J。下面我们将详细探讨这些解析方式及其在实际开发中的应用。 1. SAX解析器: SAX是一种基于事件驱动的解析器,...

    dom4j解析xml详解

    ### DOM4J解析XML详解 #### 一、DOM4J简介与特性 DOM4J是一个由dom4j.org开发的开源XML解析包,专为Java平台设计,它不仅支持DOM、SAX和JAXP标准,还巧妙地融入了Java集合框架,使其成为Java开发者在处理XML数据时...

    java dom4j解析xml

    Java DOM4J解析XML是一种常见的处理XML文档的技术,它提供了灵活且高效的API,使得开发者能够方便地读取、写入、修改以及操作XML文件。DOM4J是Java中一个非常强大的XML处理库,它结合了DOM、SAX和JDOM的优点,同时也...

    dom4j 解析(读取) xml 节点数据

    要开始解析XML文件,首先需要导入DOM4J的相关包: ```java import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; ``` 接下来,我们将创建...

    dom4j解析xml文件的压缩包

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、查询和修改变得简单。这个压缩包包含了DOM4J的完整版本,适用于那些希望在Java项目中使用DOM4J进行XML操作的开发者...

    Java解析xml配置文件,DOM4J解析xml配置文件,提供使用文档和源码下载

    Java解析XML配置文件是开发过程中常见的一项任务,特别是在基于Java的框架中,如Spring,大量使用XML文件来存储配置信息。DOM4J是Java中一个非常流行且功能强大的XML处理库,它提供了丰富的API用于读取、写入、修改...

    java 解析xml所需要的dom4j包

    描述中提到的"java xml解析所需要的包",通常包括了DOM4J库和其他辅助库,如XStream。XStream是一个用于Java的XML序列化库,能够将Java对象直接转换为XML,反之亦然。这在需要将数据持久化到XML或者从XML中恢复数据...

    XML解析技术DOM4J解析

    DOM4J提供了对XML Schema的全面支持,允许开发者在解析XML文档时进行严格的模式验证,确保数据的准确性和一致性。这对于企业级应用尤为重要,因为它们往往需要处理大量的结构化数据。 **3. 基于事件的处理** 对于...

    Java解析XML文档(DOM与DOM4j两种方式)

    Java提供了多种解析XML的API,其中DOM(Document Object Model)和DOM4j是常用的两种方法。本文将详细介绍这两种方式以及如何使用它们进行XML文档的增、删、改查操作。 一、DOM解析 DOM解析器将整个XML文档加载到...

    java操作xml dom dom4j sax jdom

    为了处理XML文档,Java提供了多种API,其中最常用的包括DOM、SAX、DOM4J和JDOM。以下是对这些方法的详细介绍: 1. DOM(Document Object Model) DOM是一种树形结构的API,它将整个XML文档加载到内存中,形成一个...

    java dom4j 解析xml的例子,可用

    2. **基本用法**:在Java程序中,首先需要导入dom4j库,然后使用`DocumentBuilderFactory`创建`DocumentBuilder`,接着使用`DocumentBuilder`解析XML文件,得到`Document`对象。你可以通过`Document`对象获取XML的根...

    JAVA 解析XML生成XML文档实例

    JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML

    dom4j 解析写入xml

    1、xml文档解析 2、 dom4j解析xml 3、实现xml文件解析 xml字符串解析 xml MAP键值对解析 4、实现xml写入与生成文件

    java 解析XML性能对比分析Demo

    本文将深入探讨几种不同的XML解析方法,并通过实际的“Java解析XML性能对比分析Demo”来展示它们的性能差异。我们将讨论DOM、SAX、JDOM、DOM4J和JAXB这五种解析器,以及它们各自的特点和适用场景。 1. DOM(文档...

Global site tag (gtag.js) - Google Analytics