java DOM4J 读取XML实例代码

 更新时间:2013年09月09日 15:26:00   作者:  
最近学习Java,在处理XML文档的时候,查阅相关资料,发现了DOM4J这个jre库,相对C#的XML处理来说,功能还算是跟得

下面展示一篇我自己写的一个XML读取测试

复制代码 代码如下:

import java.util.Iterator;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import org.dom4j.*;
import org.dom4j.io.SAXReader;

public class XmlRead {

    static StringBuilder sBuilder = new StringBuilder();

    public static void main(String[] args) throws IOException {

        BufferedReader bReader = new BufferedReader(new InputStreamReader(
                System.in));
        String path = null;
        System.out.println("请输入XML文件的绝对路径以及文件名:\n");
        path = bReader.readLine();

        sBuilder.append("开始输出XML文件内容\n");

        Document document = null;
        try {
            document = read(path);
            sBuilder.append(path + "\n");
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        }

        Element root = getRootElement(document);
        if (root == null) {
            System.out.print("没有获取到root节点");
            return;
        }
        // 获取XML文档的编码格式
        String encString = document.getXMLEncoding();
        sBuilder.append("<?xml version=\"1.0\" encoding=\"" + encString
                + "\">\n");
        sBuilder.append(elementText(root, attText(root), 0));

        System.out.println(getIterator(root, 0) + "</" + root.getName() + ">");

    }

    /**
     * 递归节点
     *
     * @description
     * @param element
     * @param lvl
     *            层级
     * @return
     */
    private static String getIterator(Element element, int lvl) {

        lvl += 1;

        for (Iterator i = element.elementIterator(); i.hasNext();) {
            Element e = (Element) i.next();
            sBuilder.append(elementText(e, attText(e), lvl));
            getIterator(e, lvl);

            int count = e.nodeCount();

            if (count > 0) {
                for (int j = 0; j < lvl; j++) {
                    sBuilder.append("    ");
                }
            }
            sBuilder.append("</" + e.getName() + ">\n");
        }

        return sBuilder.toString();
    }

    /**
     * 获取当前节点的属性的值的字符串
     *
     * @description
     * @param element
     *            当前节点
     * @return
     */
    private static String attText(Element element) {

        String str = " ";
        for (int i = 0; i < element.attributeCount(); i++) {
            Attribute attribute = element.attribute(i);

            str += attribute.getName() + "=\"" + attribute.getValue() + "\" ";
        }
        return str;
    }

    /**
     * 获取当前Element的文本值
     *
     * @description
     * @param element
     *            当前Element节点
     * @param text
     *            属性值
     * @param lvl
     *            层级
     * @return
     */
    private static String elementText(Element element, String text, int lvl) {
        String str = "";
        for (int i = 0; i < lvl; i++) {
            str += "    ";
        }
        str += "<" + element.getName();
        if (text != null && text != "") {
            str += text;
        }
     //由于dom4j里面没有 hasChild这个属性或者方法,所以要用nodeCount()这个方法来判断时候还有子节点
        int count = element.nodeCount();
        if (count == 0) {
            return str += ">";
        }
        return str += ">\n";
    }

    /**
     *
     * @description 读取XML文件
     * @param file
     *            XML文件路径,包含文件名
     * @return Document 文档
     * @throws MalformedURLException
     * @throws DocumentException
     */
    public static Document read(String file) throws MalformedURLException,
            DocumentException {

        SAXReader reader = new SAXReader();
        Document document = reader.read(new File(file));
        return document;
    }

    /**
     * 获取Document文档的root节点
     *
     * @param document
     * @return
     */
    public static Element getRootElement(Document document) {
        return document.getRootElement();
    }

}

相关文章

  • Java:com.netflix.client.ClientException错误解决

    Java:com.netflix.client.ClientException错误解决

    本文主要介绍了Java:com.netflix.client.ClientException错误解决,主要是指出客户端 module-sso 试图通过负载均衡器访问服务时,负载均衡器没有找到可用的服务器来处理请求,下面就来介绍一下解决方法
    2024-08-08
  • Struts2中validate数据校验的两种方法详解附Struts2常用校验器

    Struts2中validate数据校验的两种方法详解附Struts2常用校验器

    这篇文章主要介绍了Struts2中validate数据校验的两种方法及Struts2常用校验器,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-09-09
  • Spring MVC整合Kaptcha的具体使用

    Spring MVC整合Kaptcha的具体使用

    Kaptcha 是一个可高度配置的实用验证码生成工具,本文主要介绍了Spring MVC整合Kaptcha的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • 详解Java获取环境变量及系统属性的方法

    详解Java获取环境变量及系统属性的方法

    这篇文章主要介绍了详解Java获取环境变量及系统属性的方法,讲解了System.getEnv()和System.getProperties()这两个核心方法的使用,需要的朋友可以参考下
    2016-05-05
  • jackson在springboot中的使用方式-自定义参数转换器

    jackson在springboot中的使用方式-自定义参数转换器

    这篇文章主要介绍了jackson在springboot中的使用方式-自定义参数转换器,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java基础之Maven详解

    Java基础之Maven详解

    这篇文章主要介绍了Java基础之Maven详解,文中有非常详细的代码示例,对正在学习java基础的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • Java中Object.equals和String.equals的区别详解

    Java中Object.equals和String.equals的区别详解

    这篇文章主要给大家介绍了Java中Object.equals和String.equals的区别,文中通过一个小示例让大家轻松的明白这两者的区别,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-04-04
  • 关于弱引用WeakReference所引用的对象的回收规则

    关于弱引用WeakReference所引用的对象的回收规则

    这篇文章主要介绍了关于弱引用WeakReference所引用的对象的回收规则,如果一个弱引用实例的成员变量referent引用了一个对象obj,那么就称这个弱引用实例对obj的引用是弱引用,被一个弱引用实例引用的对象,称为弱引用对象,需要的朋友可以参考下
    2023-09-09
  • 微信小程序+后端(java)实现开发

    微信小程序+后端(java)实现开发

    这篇文章主要介绍了微信小程序+后端(java)实现开发,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Java实现学生成绩管理系统

    Java实现学生成绩管理系统

    这篇文章主要为大家详细介绍了Java实现学生成绩管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04

最新评论