dom4j学习笔记

 

 

package hb.java;

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

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class Dom4jDemo {
	
	/*
	 * 建立一个xml文件,文件的名称由输入参数决定
	 * @param filename 需要建立的文件名
	 * @return 返回操作结果,0表示失败,1表示成功
	 */
	public int createXMLFile(String filename){
		
		int returnValue = 0;
		//创建一个Document对象,即根节点
		Document doc = DocumentHelper.createDocument();
		doc.addComment("comment 1");
		//在doc元素下面添加一个Element对象
		Element booksElement = doc.addElement("books");
		//在booksElement节点下面添加一个Element对象
		Element bookElement = booksElement.addElement("book");
		//给bookElement节点添加一个属性show=yes
		bookElement.addAttribute("show", "yes");
		//给bookElement对象下面添加一个Element对象
		Element titleElement = bookElement.addElement("title");
		//titleElement对象的文本节点的值为Dom4j Tutorials
		titleElement.setText("Dom4j Tutorials");
		
		bookElement = booksElement.addElement("book");
		bookElement.addAttribute("show", "yes");
		titleElement = bookElement.addElement("title");
		titleElement.setText("Lucene Studing");
		
		bookElement = booksElement.addElement("book");
		bookElement.addAttribute("show", "no");
		titleElement = bookElement.addElement("title");
		titleElement.setText("Lucene in action");
		booksElement.addComment("i am booksElement's commons");
		Element ownerElement = booksElement.addElement("owner");
		ownerElement.setText("huangbiao");
		
		try{
		//创建一个XMLWriter对象,封装了对Document写的操作
			XMLWriter writer = new XMLWriter(new FileWriter(new File(filename)));
			writer.write(doc);
			//关闭数据流
			writer.close();
			returnValue = 1;
		}catch(Exception e){
			e.printStackTrace();
		}
		
		return returnValue;
	}
	
	
	/*
	 * 修改xml文件中的内容,并另存为一个新文件
	 * @param filename修改对象文件
	 * @param newfilename 修改后另存为该文件
	 * @return 返回操作结果,0表示失败,1表示成功
	 */
	public int modifyXMLFile(String filename,String newfilename){
		int returnValue = 0;
		try {
			SAXReader saxReader = new SAXReader();
			Document doc = saxReader.read(new File(filename));
			//使用下面的方法一定要引用jaxen.jar包,否则页面会抛异常,查询book元素属性为show的结果集合
			List list = doc.selectNodes("/books/book/@show");
			Iterator it = list.iterator();
			while(it.hasNext()){
				Attribute attr = (Attribute)it.next();
				if(attr.getValue().equals("yes")){
					attr.setValue("no");
				}
			}
			
			/*
			 * 把owner项内容改为Tshinghua,并在owner节点中加入date节点,
				内容为2004-9-11,还为date节点添加一个参数type
			 */
			//查询books元素的子元素owner的节点
			list = doc.selectNodes("/books/owner");
			it = list.iterator();
			if(it.hasNext()){
				Element ownerElement = (Element)it.next();
				ownerElement.setText("Tshinghua");
				Element dateElement = ownerElement.addElement("date");
				dateElement.setText("2004-9-11");
				dateElement.addAttribute("type", "huangbiao");
			}
			
			/** 修改内容之三: 若title内容为Dom4j Tutorials,则删除该节点 */
			list = doc.selectNodes("books/book");
			it = list.iterator();
			while(it.hasNext()){
				Element bookElement = (Element)it.next();
				Iterator iterator = bookElement.elementIterator("title");
				while(iterator.hasNext()){
					Element titleElement = (Element)iterator.next();
					if(titleElement.getText().equals("Dom4j Tutorials")){
						bookElement.remove(titleElement);
					}
				}
			}
			
			try{
				XMLWriter w = new XMLWriter(new FileWriter(new File(newfilename)));
				w.write(doc);
				w.close();
				returnValue = 1;
			}catch (Exception e) {
				// TODO: handle exception
			}
			
			
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return returnValue;
	}
	
	/*
	 * xml文件格式化的问题
	 */
	public int formatXMLFile(String filename){
		int returnValue = 0;
		try {
			SAXReader saxReader = new SAXReader();
			Document doc = saxReader.read(new File(filename));
			XMLWriter output = null;
			OutputFormat format = OutputFormat.createPrettyPrint();
			format.setEncoding("utf-8");
			output = new XMLWriter(new FileWriter(new File(filename)),format);
			output.write(doc);
			output.close();
			returnValue = 1;
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return returnValue;
	}
	
}

 

package hb.java;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamSource;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import org.dom4j.DocumentException;

import org.dom4j.io.DocumentResult;
import org.dom4j.io.DocumentSource;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class Foo {

	public Document parse(File file) throws DocumentException {

		// 以DOM4J默认的SAX解析器解析

		SAXReader reader = new SAXReader();

		// read函数的形参可以是url 也可以是 File类型,也可以是STRING类型的相对或绝对路径

		Document document = reader.read(file);

		return document;

	}

	public void bar(Document document) throws DocumentException {

		// 获得根节点

		Element root = document.getRootElement();

		// i为根节点孩子节点的迭代器

		for (Iterator i = root.elementIterator(); i.hasNext();) {

			Element element = (Element) i.next();

			// do something

			System.out.println(element.getName());

		}

		// 名为“student1”节点以下孩子节点的迭代器

		for (Iterator i = root.elementIterator("student1"); i.hasNext();) {

			Element foo = (Element) i.next();

			// do something

			System.out.println(foo.getText());

		}

		// 根节点属性的迭代器

		for (Iterator i = root.attributeIterator(); i.hasNext();) {

			Attribute attribute = (Attribute) i.next();

			// do something

			System.out.println(attribute.getValue());

		}

	}
	
	public Document createDocument() {
        Document document = DocumentHelper.createDocument();
        Element root = document.addElement( "root" );
 
        Element author1 = root.addElement( "author" )
            .addAttribute( "name", "James" )
            .addAttribute( "location", "UK" )
            .addText( "James Strachan" );
 
        Element author2 = root.addElement( "author" )
            .addAttribute( "name", "Bob" )
            .addAttribute( "location", "US" )
            .addText( "Bob McWhirter" );
 
        return document;
    }
	
	public void write(Document document) throws IOException {
		 
        // lets write to a file
        XMLWriter writer = new XMLWriter(
            new FileWriter( "output.xml" )
        );
        writer.write( document );
        writer.close();
 
        // 打印出Pretty的样式。即元素之间有换行。
        OutputFormat format = OutputFormat.createPrettyPrint();
        writer = new XMLWriter( System.out, format );
        writer.write( document );
 
        // 紧凑的格式,所有元素在一行
        format = OutputFormat.createCompactFormat();
        writer = new XMLWriter( System.out, format );
        writer.write( document );
    }

	public Document styleDocument(Document document, String stylesheet) throws Exception {

		// load the transformer using JAXP

		TransformerFactory factory = TransformerFactory.newInstance();

		Transformer transformer = factory.newTransformer(

				new StreamSource(stylesheet)

		);

		// now lets style the given document

		DocumentSource source = new DocumentSource(document);

		DocumentResult result = new DocumentResult();

		transformer.transform(source, result);

		// return the transformed document

		Document transformedDoc = result.getDocument();

		return transformedDoc;

	}


}
 

你可能感兴趣的:(dom4j)