dom4j组装xml 以及解析xml

使用dom4j解析xml文件以及 将object组装成xml文件,具体代码如下:

package xml;

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

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

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

  
import org.w3c.dom.Node;  
import org.w3c.dom.NodeList; 
import org.xml.sax.SAXException;

/**
 *@author WHD
 *data 2016年1月10日
 */
public class Dom4j {
	 public static void main(String[] args) 
	    {
		 Dom4j   dom4j= new Dom4j();
		 try {
			dom4j.objectToXml();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	    }
	 
	 // 获取并解析xml格式文件为object
	 public void xmlToObject() throws ParserConfigurationException, DocumentException, SAXException, IOException{
		   SAXReader saxReader = new SAXReader();
                //将获取的xml 转化为document 文档
		//这里使用了File当然也可以使用URL()从指定url获取xml并进行解析 
	        Document document = saxReader.read(new File("F:/student2.xml"));
	        // 获取根元素
	        Element root = document.getRootElement();
	        // 根元素名称
	        System.out.println("Root----: " + root.getName());
	        
	        // 获取所有子元素
	        List<Element> childList = root.elements();
	        System.out.println("total child count: " + childList.size());

	        // 获取特定名称的子元素
	        List<Element> childList2 = root.elements("hello");
	        Element  helloElement= root.element("hello");
	        System.out.println("hello child: " + childList2.size());
	        // 获取特定名称的子元素的值
	        System.out.println("hello----"+childList2.get(0).getText());
	        System.out.println("hello----"+helloElement.getText().trim());
	        System.out.println("迭代输出-----------------------");
	        // 迭代输出
	        for (Iterator iter = root.elementIterator(); iter.hasNext();)
	        {   // 获取根目录下的元素
	            Element e = (Element) iter.next();
	            // 获取元素对应的值
	            System.out.println(e.getText());
	            // 元素的属性个数
	            System.out.println(e.attributeCount());
	            //获取元素的第一个属性的名称
	            System.out.println(e.attribute(0).getName());
	            //获取元素的第一个属性的值
	            System.out.println(e.attribute(0).getValue());
	            //获取元素的第二个属性的名称
	            System.out.println(e.attribute(1).getName());
	          //获取元素的第二个属性的值
	            System.out.println(e.attribute(1).getValue());
	            //按照属性名称获取属性值
	            System.out.println("are you ok :"+e.attributeValue("age"));
	            System.out.println("are you ok :"+e.attributeValue("name"));
	        }
                // 使用DOMReader将xml转化为object
	        System.out.println("用DOMReader-----------------------");
	        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
	        DocumentBuilder db = dbf.newDocumentBuilder();
	        // 注意要用完整类名
	        //将获取的xml 转化为document 文档
	        org.w3c.dom.Document document2 = db.parse(new File("F:/student2.xml"));

	        DOMReader domReader = new DOMReader();

	        // 将JAXP的Document转换为dom4j的Document
	        Document document3 = domReader.read(document2);

	        Element rootElement = document3.getRootElement();

	        System.out.println("Root: " + rootElement.getName());
	    }
	 
	  // 将对象组装成xml格式文件并保存
	 public void objectToXml ()throws Exception{

	        // 第一种方式:创建文档,并创建根元素
	        // 创建文档:使用了一个Helper类
	        Document document = DocumentHelper.createDocument();
	        // 创建根节点并添加进文档
	        Element root = DocumentHelper.createElement("student");
	        document.setRootElement(root);

	        // 第二种方式:创建文档并设置文档的根元素节点
	        Element root2 = DocumentHelper.createElement("student");
	        Document document2 = DocumentHelper.createDocument(root2);
	        // 给元素添加属性
	        root2.addAttribute("name", "zhangsan");
	        // 添加子节点:add之后就返回这个元素
	        Element helloElement = root2.addElement("hello");
	        Element worldElement = root2.addElement("world");
	        //给元素添加属性key-value
	        worldElement.addAttribute("age","12");
	        worldElement.addAttribute("name","www");
	        helloElement.addAttribute("age","13");
	        helloElement.addAttribute("name","wws");
	        //元素的节点的值
	        helloElement.setText("hello Text");
	        worldElement.setText("world text");
	        // 输出
	        // 输出到控制台
	        XMLWriter xmlWriter = new XMLWriter();
	        xmlWriter.write(document);

	        //输出到文件
	        //其中的"  "表示格式,true参数表示另起一行,gb2312表示编码,如果不写这个参数则默认utf-8编码
	        //1、OutputFormat format=new OutputFormat("  ",true,"gb2312"); 
	        //生成压缩格式、紧凑格式的xml  其中的compactFormat 翻译:压缩格式    
	        //2、 OutputFormat format = OutputFormat.createCompactFormat();
	        //调用静态方法创建一个没有格式的打印方式
	        //3、 OutputFormat format = OutputFormat.createPrettyPrint();    
	        //format.setEncoding("gb2312");  // 设置编码
	        OutputFormat format = new OutputFormat("  ", true);// 设置缩进为2个空格,并且另起一行为true
	        XMLWriter xmlWriter2 = new XMLWriter(
	                new FileOutputStream("F:/student1.xml"), format);
	        xmlWriter2.write(document2);
	        xmlWriter2.flush();
	        xmlWriter2.close();

	        // 另一种输出方式,记得要调用flush()方法,否则输出的文件中显示空白,调用close() 方法释放资源
	        XMLWriter xmlWriter3 = new XMLWriter(new FileWriter("F:/student2.xml"),
	                format);
	        xmlWriter3.write(document2);
	        xmlWriter3.flush();
	        xmlWriter3.close();
	 }
}

执行生生成的文件以及加载解析的文件截图如下:

dom4j组装xml 以及解析xml_第1张图片


 /*  dom4j 包下载 */

点击下载dom4j.jar



你可能感兴趣的:(dom4j组装xml 以及解析xml)