Java-Dom4jHelper工具类

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.URL;
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.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class Dom4jHelper {
    /**
     *  解析url xml文档
     * @param url
     * @return
     * @throws DocumentException
     */
    public Document parse(URL url) throws DocumentException {
        SAXReader reader = new SAXReader();
        Document document = reader.read(url);
        return document;
    }
    /**
     * 遍历解析文档
     * @param document
     */
    public void treeWalk(Document document) {
        treeWalk( document.getRootElement() );
    }
    /**
     * 遍历解析元素
     * @param element
     */
    public void treeWalk(Element element) {
        for ( int i = 0, size = element.nodeCount(); i < size; i++ ) {
            Node node = element.node(i);
            if ( node instanceof Element ) {
                treeWalk( (Element) node );
            }
            else {
                // 处理....
            }
        }
    }

    /** 
     * 解析文件,获得根元素
     * @param xmlPath
     * @param encoding
     * @return
     * @throws Exception
     */
    public static Element parse(String xmlPath,String encoding)throws Exception{
        //文件是否存在
        File file = new File(xmlPath);
        if(!file.exists()){
            throw new Exception("找不到xml文件:"+xmlPath);
        }

        //解析
        SAXReader reader = new SAXReader(false);
        Document doc = reader.read(new FileInputStream(file),encoding);
        Element root = doc.getRootElement();
        return root;
    }

    /**
     * 保存文档
     * @param doc
     * @param xmlPath
     * @param encoding
     * @throws Exception
     */
    public static void save(Document doc,String xmlPath,String encoding)throws Exception{
        OutputFormat format=OutputFormat.createPrettyPrint();
        format.setEncoding(encoding);
        XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(xmlPath),encoding),format);
        writer.write(doc);
        writer.flush();
        writer.close(); 
    }
    /**
     * 修改xml某节点的值
     * @param inputXml 原xml文件
     * @param nodes 要修改的节点
     * @param attributename 属性名称
     * @param value 新值
     * @param outXml 输出文件路径及文件名 如果输出文件为null,则默认为原xml文件
     */
    public static void modifyDocument(File inputXml, String nodes, String attributename, String value, String outXml) {
        try {
            SAXReader saxReader = new SAXReader();
            Document document = saxReader.read(inputXml);
            List list = document.selectNodes(nodes);
            Iterator iter = list.iterator();
            while (iter.hasNext()) {
                Attribute attribute = (Attribute) iter.next();
                if (attribute.getName().equals(attributename))
                    attribute.setValue(value);
            }
            XMLWriter output;
            if (outXml != null){ //指定输出文件
                output = new XMLWriter(new FileWriter(new File(outXml)));
            }else{ //输出文件为原文件
                output = new XMLWriter(new FileWriter(inputXml));
            }
            output.write(document);
            output.close();
        }

        catch (DocumentException e) {
            System.out.println(e.getMessage());
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }   

    /**
     * xml转换为字符串
     * @param doc
     * @param encoding
     * @return
     * @throws Exception
     */
    public static String toString(Document doc,String encoding)throws Exception{
        OutputFormat format=OutputFormat.createPrettyPrint();
        format.setEncoding(encoding);
        ByteArrayOutputStream byteOS=new ByteArrayOutputStream();
        XMLWriter writer = new XMLWriter(new OutputStreamWriter(byteOS,encoding),format);
        writer.write(doc);
        writer.flush();
        writer.close();     
        writer=null;

        return byteOS.toString(encoding);
    }
    /**
     * 字符串转换为Document
     * @param text
     * @return
     * @throws DocumentException
     */
    public static Document str2Document(String text) throws DocumentException{
        Document document = DocumentHelper.parseText(text);
        return document;
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

    }

}
目录
相关文章
|
7月前
|
XML JavaScript Java
【JAVA XML 探秘】DOM、SAX、StAX:揭秘 Java 中 XML 解析技术的终极指南!
【8月更文挑战第25天】本文详细探讨了Java中三种主流的XML解析技术:DOM、SAX与StAX。DOM将XML文档转换为树状结构,便于全方位访问和修改;SAX采取事件驱动模式,适用于大型文件的顺序处理;StAX则兼具DOM和SAX的优点,支持流式处理和随机访问。文中提供了每种技术的示例代码,帮助读者理解如何在实际项目中应用这些解析方法。
300 1
|
9月前
|
XML Java 数据格式
必知的技术知识:java基础73dom4j修改xml里面的内容(网页知识)
必知的技术知识:java基础73dom4j修改xml里面的内容(网页知识)
58 1
|
5月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
273 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
5月前
|
Java
Java 些许公共工具类
Java 些许公共工具类
30 1
|
7月前
|
缓存 前端开发 Java
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
【8月更文挑战第10天】java基础巩固,工具类的封装
47 1
|
7月前
|
Java
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
|
7月前
|
XML JavaScript Java
Java 中 DOM 和 SAX 解析器之间的区别
【8月更文挑战第22天】
52 0
|
7月前
|
存储 设计模式 安全
Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类
Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类
112 0
|
8月前
|
设计模式 存储 安全
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
92 1
|
8月前
|
安全 Java 开发者
Java中的并发工具类与线程安全实现
Java中的并发工具类与线程安全实现

热门文章

最新文章