dom4j解析xml实例

原文链接: https://my.oschina.net/zichen/blog/104352

使用dom4j对xml文件进行读写,以下代码经过测试,可以直接运行。

使用dom4j解析xml文件,要添加dom4j.jar架包

package com.zl.dom4j;
import java.io.File;
import java.io.FileOutputStream;
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.Attribute;
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;

public class CreateXml {

 public static void main(String[] args) {
  CreateXml create = new CreateXml();
  String path = "E:/skills.xml";
  Document document = create.createxmlmethod();
  create.printxmlmethod(document,path);
  create.readxmlmethod();
 }

 @SuppressWarnings("unused")
 public  Document createxmlmethod() {
  //创建document文档对象
  Document document = DocumentHelper.createDocument();
  
  //设置文档DocType,这里只是为了举例,添加hibernate的DocType
  if(false){
   document.addDocType("hibernate -configuration",
     "-//Hibernate/Hibernate Configuration DTD 3.0//EN",
     "http://hibernate.sourceforge.net/hibernate -configuration -3.0.dtd");
  }

  // 文档增加节点,即根节点,一个文档只能有一个根节点,多加出错
  Element root = document.addElement("skills");
  // 添加注释
  root.addComment("第一个技能");
  // 根节点下添加节点
  Element first = root.addElement("skill");
  // 节点添加属性
  first.addAttribute("name", "独孤九剑");
  // 节点下添加节点
  Element info = first.addElement("info");
  // 节点设置内容数据
  info.setText("为独孤求败所创,变化万千,凌厉无比。其传人主要有风清扬、令狐冲。");
  // 同理增加其他节点,内容,属性等
  Element second = root.addElement("skill");
  second.addAttribute("name", "葵花宝典");
  Element info2 = second.addElement("info");
  info2.setText("宦官所创,博大精深,而且凶险至极。练宝典功夫时,首先要自宫净身。");

  /**
   * 第二种方法增加节点,内容,属性等。先创建节点,属性,然后使用add 加入。
   */
  // 创建节点
  Element third = DocumentHelper.createElement("skill");
  // 将节点加入到根节点中
  root.add(third);
  // 创建属性,第一个参数指定了拥有者,也可以为null,指定拥有者
  Attribute name = DocumentHelper.createAttribute(third, "name", "北冥神功");
  // 将属性加入到节点上

  third.add(name);
  // 创建子节点并加入到节点中
  Element info3 = DocumentHelper.createElement("info");
  info3.setText("逍遥派的顶级内功之一,能吸人内力转化为自己所有,威力无穷。");
  third.add(info3);
  return document;
 }
 
 public void printxmlmethod(Document doc,String path){
  try {
   // 创建格式化类
   OutputFormat format = OutputFormat.createPrettyPrint();
   // 设置编码格式,默认gb2312
   format.setEncoding("gb2312");
   // 创建输出流,此处要使用Writer,需要指定输入编码格式,使用OutputStream则不用
   FileOutputStream fos = new FileOutputStream(path);
   // 创建xml 输出流
   XMLWriter writer = new XMLWriter(fos, format);
   // 生成xml 文件
   writer.write(doc);
   writer.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 
 @SuppressWarnings("unused")
 public void readxmlmethod(){
  Document document=null;
  if(true){
   //使用SAXReader 解析
   SAXReader reader = new  SAXReader();
   try {
    document = reader.read( new  File( "e:/skills.xml" ));
   } catch (DocumentException e1) {
    e1.printStackTrace();
   }
  }else{
   //使用DOMReader 解析
     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder db;
   try {
    db = dbf.newDocumentBuilder();
    File file = new  File( "d:/skills.xml" );
    org.w3c.dom.Document domDocument = db.parse(file);
    DOMReader reader = new  DOMReader();
    document = reader.read(domDocument);
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  
  //获取根节点
  Element root = document.getRootElement();
  @SuppressWarnings("rawtypes")
  //获取根节点下的节点集合
  List skills = root.elements(); 
  //遍历根节点下的节点
  for(Iterator it = skills.iterator(); it.hasNext();) {
   //获取根节点下的节点对象skill
    Element e = (Element) it.next();
    //获取skill节点的name属性。返回方式为:name="北冥神功"
    Attribute attr1 = e.attribute("name");
    //获取skill节点下的节点 info
    Element info = e.element("info");
    //获取info节点下的文本节点
    String text = info.getText();
    System.out.println("根节点:"+root.getName()+"||节点名称:"+e.getName()+"-name属性:"+attr1.getValue()+"||子节点:"+info.getName()+"||子节点内容:"+text);
  }
 }
}

转载于:https://my.oschina.net/zichen/blog/104352

你可能感兴趣的:(dom4j解析xml实例)