Java-创建和解析XML文件(之)使用Dom4j

重点 :使用到了包dom4j.jar http://download.csdn.net/detail/male09/9868245,
或者 http://download.csdn.net/detail/male09/9880418
开始创建XML文件:
思路:
1.查看当前是否有文件可写
2.插件XML文件
3.写入XML文件数据
用到的导入包:
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

//创建XML文件的路径

String xmlPath = "D:/xml/upgrade.xml";
        File f = new File("D:/xml");
        if (!f.exists()) {
            f.mkdirs();
        }
        File f1 = new File("xmlPath");
        f1.createNewFile();
        System.out.println(f1.exists());
        // 向XML文件写入数据
        createNewsXML(xmlPath);

创建XML文件方法

  private static void createNewsXML(String xmlPath) {
        // TODO Auto-generated method stub
        try {
            // 创建一个xml文档
            Document doc = DocumentHelper.createDocument();
            // 向xml文件中添加注释
            doc.addComment("这是一个书店的XML文件");
            // 创建一个名为Upgrade的节点,因为是第一个创建,所以是根节点,再通过doc创建一个则会报错。
            Element root = doc.addElement("书店");
            // 在root节点下创建一个名为filedata的节点
            Element filEle = root.addElement("博客类");
            // 给filedata节点添加
            Element detailEle = filEle.addElement("种类");
            Element customer_noEle = detailEle.addElement("博客名");
            // 设置子节点的文本
            customer_noEle.setText("红叶岭谷");
            Element software_verEle = detailEle.addElement("博客地址");
            software_verEle.setText("http://blog.csdn.net/male09");
            Element listEle = detailEle.addElement("博客资源");
            Element hardwareEle = listEle.addElement("Android类");
            Element modelEle = hardwareEle.addElement("下载资源");
            modelEle.setText("http://download.csdn.net/detail/male09");
            Element verEle = hardwareEle.addElement("下载积分");
            verEle.setText("0");
            Element authEle = filEle.addElement("博客更新时间");
            authEle.setText("实时");
            Element dataEle = filEle.addElement("data");
            Element sectorEle = dataEle.addElement("sector");
            sectorEle.setText("每页数据块");
            Element signEle = root.addElement("书店地址");
            signEle.setText("红叶岭谷博客1108号");
            // 用于格式化xml内容和设置头部标签
            OutputFormat format = OutputFormat.createPrettyPrint();
            // 设置xml文档的编码为utf-8
            format.setEncoding("utf-8");
            Writer out;

            // 创建一个输出流对象
            out = new FileWriter(xmlPath);
            // 创建一个dom4j创建xml的对象
            XMLWriter writer = new XMLWriter(out, format);
            // 调用write方法将doc文档写到指定路径
            writer.write(doc);
            writer.close();
            System.out.print("生成XML文件成功");
        } catch (IOException e) {
            System.out.print("生成XML文件失败");
            e.printStackTrace();
        }
    }

运行后打开文件效果

<?xml version="1.0" encoding="utf-8"?>

<!--这是一个书店的XML文件-->
<书店>
  <博客类>
    <种类>
      <博客名>红叶岭谷</博客名>
      <博客地址>http://blog.csdn.net/male09</博客地址>
      <博客资源>
        <Android类>
          <下载资源>http://download.csdn.net/detail/male09</下载资源>
          <下载积分>0</下载积分>
        </Android类>
      </博客资源>
    </种类>
    <博客更新时间>实时</博客更新时间>
    <data>
      <sector>每页数据块</sector>
    </data>
  </博客类>
  <书店地址>红叶岭谷博客1108号</书店地址>
</书店>

解析XML文件

思路:
1.获取文件
2.实例化解析工厂

// 创建解析器
        SAXReader reader = new SAXReader();

3.读取文件获取解析对象

// 获取解析对象
        Document read = reader.read(new File(fileName));

4.开始一层一层的解析:

实例:

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

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

    public static void main(String[] args) throws Exception {
        String xmlPath = "./xml/upgrade.xml";
        File f = new File("./xml");
        if (!f.exists()) {
            f.mkdirs();
        }
        File f1 = new File("xmlPath");
        f1.createNewFile();
        // 向XML文件写入数据
        // createNewsXML(xmlPath);
        parserXml(xmlPath, 6);
    }

    /**
     * 解析xml文件
     * 
     * @param fileName
     *            文件路径
     * @param depth
     *            xml最深的标签层次(即:最多有几层)
     * @throws Exception
     */
    private static void parserXml(String fileName, int depth) throws Exception {
        // 创建解析器
        SAXReader reader = new SAXReader();
        // 获取解析对象
        Document read = reader.read(new File(fileName));

        Element elementRoot = read.getRootElement();

        String rootname = elementRoot.getName();

        System.out.println("根节点名称=" + rootname);
        // 获取根节点下的子节点集合
        Iterator<Element> iterator = elementRoot.elementIterator();
        while (iterator.hasNext()) {
            Element element = iterator.next();
            System.out.println("第一层name = " + element.getName());
            List<Element> elements = element.elements();
            if (elements != null && elements.size() > 0) {
                for (Element elementItem : elements) {
                    System.out.println("第二层name=" + elementItem.getName());
                    List<Element> elements2 = elementItem.elements();
                    if (elements2 != null && elements2.size() > 0) {
                        for (Element el : elements2) {
                            System.out.println("第三层name=" + el.getName());
                            List<Element> elements3 = el.elements();
                            if (elements3 != null && elements3.size() > 0) {
                                for (Element element2 : elements3) {
                                    System.out.println("第四层name=" + element2.getName());
                                    List<Element> elements4 = element2.elements();
                                    if(elements4 != null && elements4.size()>0){
                                        for (Element element3 : elements4) {
                                            System.out.println("第五层name="+element3.getName());
                                            List<Element> elements5 = element3.elements();
                                            if(elements5 != null && elements5.size()>0){
                                                //没有了
                                            }else{
                                                System.out.println("第五层Values="+element3.getText().trim());
                                            }
                                        }
                                    }else{
                                        System.out.println("第四层Values="+element2.getText().trim());
                                    }
                                }
                            } else {
                                System.out.println("第三层Values=" + el.getText().trim());
                            }
                        }
                    } else {
                        System.out.println("第二层values=" + elementItem.getText().trim());
                    }
                }
            } else {
                System.out.println("第一层values = " + element.getText().trim());
            }

        }
    }

运行结果:

根节点名称=书店
第一层name = 博客类
第二层name=种类
第三层name=博客名
第三层Values=红叶岭谷
第三层name=博客地址
第三层Values=http://blog.csdn.net/male09
第三层name=博客资源
第四层name=Android类
第五层name=下载资源
第五层Values=http://download.csdn.net/detail/male09
第五层name=下载积分
第五层Values=0
第二层name=博客更新时间
第二层values=实时
第二层name=data
第三层name=sector
第三层Values=每页数据块
第一层name = 书店地址
第一层values = 红叶岭谷博客1108

猜你喜欢

转载自blog.csdn.net/male09/article/details/73124235