Java 使用dom4j解析xml文件

这篇博客详细介绍了如何使用DOM4J库在Java中递归读取和写入XML文件。示例代码展示了如何读取指定路径的节点,添加新的元素并保存到新的XML文件中。同时,还包含了一个XPath语法的有效性验证方法。
摘要由CSDN通过智能技术生成

使用dom4j递归读取xml文件和写入代码

    public void read() throws IOException, DocumentException {
        // 创建saxReader对象
        SAXReader reader = new SAXReader();
        // 通过read方法读取一个文件 转换成Document对象
        Document document = reader.read(new File("./db/y.xml"));
        //获取根节点元素对象
        Element node = document.getRootElement();
        //遍历所有的元素节点
         listNodes(node);
        //通过路径选择节点,如果xml文件中没有该路径,则返回null
       Element element1 =(Element)document.selectSingleNode("/四大名著") ;
        //通过路径选择节点,如果xml文件中没有该路径,则返回创建一个节点
       Element element2=DocumentHelper.makeElement(document,"/四大名著/水浒传/人物");
       //添加CDATA区域
       elemen2t.addCDATA("林冲,武松");
        //获取该节点的父节点
        Element element3=element.getParent();
        element1.add(element2);
        // 写入到一个新的文件中
        writer(document);
    }
    public void listNodes(Element node){
        if(node==null){
            System.out.println("null");
            return;
        }
        System.out.println("当前节点的路径::" + node.getPath());
        //获取字节点
        List<Element> elements=node.elements();
        for(Element element:elements){
            if(element.isTextOnly()){
                System.out.println("当前节点的名称:" + element.getName()+"---- "+element.getText());
            } else {
                listNodes(element);
            }
        }
    }

    public void writer(Document document) throws IOException {
        OutputFormat format = format();
        // 创建XMLWriter对象,指定了写出文件及编码格式
        XMLWriter writer = new XMLWriter(new FileOutputStream("./db/y.xml"), format);
        // 写入
        writer.write(document);
        // 立即写入
        writer.flush();
        // 关闭操作
        writer.close();

    }
    
    /**
     * 文件格式化
     *
     * @return OutputFormat
     */
    public  OutputFormat format() {
        OutputFormat format = new OutputFormat();
        format.setIndentSize(4);
        format.setNewlines(true);
        format.setTrimText(true);
        format.setPadText(true);
        format.setEncoding("UTF-8");
        return format;
    }

y.xml文件中的内容

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

<四大名著>
  <西游记>
    <作者>吴承恩1</作者>
    <作者>吴承恩2</作者>
    <朝代>明朝</朝代>
  </西游记>
  <红楼梦>
    <作者>曹雪芹</作者>
  </红楼梦>
</四大名著>

Xml文件路径验证器 

/**
     * 验证xPath语法是否有效
     *
     * @param path xPath路径
     * @return true/false
     */
    public static Boolean xPathVerify(String path) {
        XPathFactory factory = XPathFactory.newInstance();
        XPath xPath = factory.newXPath();
        try {
            xPath.compile(path);
        } catch (XPathExpressionException e) {
            return false;
        }
        return true;
    }

自己记录的一些笔记,内容如有不对请指正 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangjingyang2020

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值