JDOM及DOM4J解析xml文件

Java文件操作①——XML文件的读取 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 阅读详情

JDOM及DOM4J都是java非官方的解析方式,所以都要引入jar包,JDOM方式需要导入jdom.jar,DOM4J方式需要导入dom4j.jar
解析xml文件有时会出现乱码问题:xml文件中定义的encoding不匹配
解决方法:
(1)针对xml文件:修改encoding字符集
(2)针对代码:创建字符流时,使用InputStreamReader(in, charsetName)

JDOM解析代码:

package com.imooc.jdomtest;


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

public class JDOMTest {

    /**
     * @param args
     */
    @SuppressWarnings("unchecked")
    public static void main(String[] args) {
        // 进行对book.xml文件的解析工作
        // 1.创建一个SAXBuilder的对象
        SAXBuilder saxBuilder = new SAXBuilder();
        try {
            // 2.创建一个输入流,将xml文件加载到输入流中
            InputStream is = new FileInputStream("book.xml");
            // 3.通过SAXBuilder的build方法,将输入流加载到SAXBuilder中
            Document document = saxBuilder.build(is);
            // 4.通过document对象获得xml文件的根节点
            Element rootElement = document.getRootElement();
            // 5.获取根节点下的子节点的List集合
            List<Element> bookList = rootElement.getChildren();
            // 继续进行解析
            for (Element book : bookList) {
                System.out.println("======开始解析第" + (bookList.indexOf(book) + 1)
                        + "本书=====");
                // //知道属性名称时
                // Attribute att=book.getAttribute("id");
                // 解析book的属性(针对不清楚属性个数和名称)
                List<Attribute> attrList = book.getAttributes();
                // 遍历attrList
                for (Attribute attr : attrList) {
                    // 获取属性名
                    String attrName = attr.getName();
                    // 获取属性值
                    String attrValue = attr.getValue();
                    System.out
                            .println("属性名:" + attrName + "--属性值:" + attrValue);
                }
                // 对book结点的子节点进行遍历
                List<Element> bookChildren = book.getChildren();
                for (Element child : bookChildren) {
                    System.out.println("结点名:" + child.getName() + "--结点值:"
                            + child.getValue());
                }
                System.out.println("======结束解析第" + (bookList.indexOf(book) + 1)
                        + "本书=====");
            }
        } catch (JDOMException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

DOM4J解析代码:

import java.io.File;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class DOM4jTest {

    /**
     * @param args
     */
    @SuppressWarnings("unchecked")
    public static void main(String[] args) {
        // 解析book.xml
        // 创建SAXReader对象
        SAXReader reader = new SAXReader();
        try {
            // 通过reader对象的read方法加载xml文件
            Document document = reader.read(new File("book.xml"));
            // 通过document对象获得根节点
            Element bookstore = document.getRootElement();
            // 通过element对象elementIterator()方法获得迭代器
            Iterator it = bookstore.elementIterator();
            // 遍历迭代器,获取根节点中的信息
            while (it.hasNext()) {
                System.out.println("=================开始遍历某一本书================");
                Element book = (Element) it.next();
                // 获取book的属性名和属性值
                List<Attribute> bookAttr = book.attributes();
                for (Attribute attr : bookAttr) {
                    System.out.println("属性名:" + attr.getName() + "--属性值:"
                            + attr.getValue());
                }
                Iterator itt = book.elementIterator();
                while (itt.hasNext()) {
                    Element bookChild = (Element) itt.next();
                    System.out.println("结点名:" + bookChild.getName() + "--结点值:"
                            + bookChild.getStringValue());
                }
                System.out.println("=================结束遍历某一本书================");
            }
        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

若希望导入的jar包能随着项目的迁移而迁移,可以在src下新建一个folder(取名lib),再将jar包拷到lib中,在Build Bath中添加lib中的jar包。

OTA 升级失败/回滚策略设计:打造安全可靠的双分区/断点续传/签名校验方案 双分区机制(A/B Partitioning)是OTA升级的“保险箱”。简单来说,设备存储分为两个分区:A分区(当前运行)和B分区(备用)。升级时,新固件写入B分区,A分区保持不变。如果升级成功,系统切换到B分区运行;如果失败,设备直接回滚到A分区,完全不受影响。这就像玩游戏存档:你打Boss前存了个档,万一挂了还能读档重来。双分区就是设备的“读档”机制,避免了变砖的尴尬。以Android设备为例,Google从Android 7.0开始强制引入A/B分区机制(Seamless Updates)。 阅读详情

相关推荐

C# 进程间 双内存共享 高帧率图像传输

演示了两个进程之间通过 双内存共享 的方式, 来实时处理图像,并以高帧率(40~60FPS)传输的基本示例。 进程间内存共享的优点:高性能、低延迟、资源效率高、简单可靠。 适用场景:实时图像处理、大数据传输、多进程协作、实时监控系统,等等。

qianqiansd 1996

java jdom dom4j_Java基础系列17:使用DOM、SAX、JDOM、DOM4J解析XML文件详解

一 简介在Java中,可以使用多种方式来解析XML文件,其中最常见的可能就是DOM、SAX、JDOM、DOM4J这四种方式了。其中,DOM和SAX这两种解析XML文件的方式有jdk自带的API,因此不需要额外引入第三方的jar包。与之相反的是,JDOM和DOM4J这两种解析方式都是第三方开源项目,因此在使用这两种方式解析XML文件时需要额外引入相关jar包(1)DOMDOM是用与平台和语言无关的方...

weixin_34125336的博客 565

遥感新手别纠结!实测ENVI 5.3、5.6、6.0三个免费版,教你混搭安装避坑

本文为遥感新手提供ENVI 5.3、5.6、6.0三个免费版的实测对比与混搭安装指南,帮助用户构建零成本高效工作流。详细解析各版本功能差异、共存安装技巧及常见问题解决方案,特别适合课程作业、毕业论文分析和遥感入门练习。

weixin_30819085的博客 472

java解析xml文件(三种方式-(dom ,jdom ,dom4j)

test.xml文件 Xml代码  xml version="1.0" encoding="UTF-8"?> HD> disk name="C"> capacity>8Gcapacity> directories>200directories> files>1580files> disk> disk name="D"> capacity>10Gc

wanganqi19920813的专栏 893

ADC(三)Guard ring的设计艺术:从单元到系统的隔离策略

本文深入探讨了ADC设计中Guard ring(保护环)从单元到系统的多层次隔离策略。文章分享了从新手到专家的认知升级过程,详细分析了在单元内部进行微隔离、在模块间建立噪声屏障以及在系统层面规划全局隔离带的实用方法与设计艺术,强调了Guard ring对于提升混合信号电路性能和可靠性的关键作用。

weixin_28312391的博客 149

快速修改Petalinux编译生成的rootfs.cpio.gz文件:无需重新编译的实用技巧

本文详细介绍了如何在不重新编译的情况下快速修改Petalinux生成的rootfs.cpio.gz文件,适用于Zynq平台开发。通过解包image.ub、修改rootfs内容并重新打包的完整流程,可显著提升调试效率,特别适合频繁修改配置文件的场景。文章还提供了自动化脚本和进阶应用技巧,帮助开发者优化工作流程。

weixin_28285943的博客 238

DOM、SAX、JDOM、DOM4J以及PULL在XML文件解析中的工作原理以及优缺点对比

转自:http://blog.youkuaiyun.com/seu_calvin/article/details/52027484 1.  DOM(Document Object Model)文档对象模型 (1)DOM是W3C指定的一套规范标准,DOM的核心是按树形结构处理数据,DOM解析器读入XML文件并在内存中建立一个结构一模一样的树,可以指定要访问的元素,进行随机访问,随意修改XML文件。尤

Dijkstra的专栏 347

Aloudata Agent :基于 NoETL 明细语义层的分析决策智能体

这是包括我们在内的一些厂商探索的一个新方向,这种方式先由大模型将自然语言转化为对指标语义层的查询请求(MQL,Metrics Query Language),再由指标平台将指标和维度的查询与计算逻辑转化为准确的 SQL 查询语句。用户查询经大模型语义解析后,将其转换为指标、维度及筛选条件的组合表达,并生成面向指标平台的 MQL,Aloudata CAN 指标平台的语义引擎将 MQL 转换为准确和可执行的查询 SQL,语义引擎内置函数体系与 SQL 解析器,确保语义转换的 100% 准确性。

Aloudata的博客 1663

Java解析XML文件方法介绍(SAX,JDOM,DOM4J)

示例XML文件: <?xml version="1.0" encoding="utf-8" ?> <class> <student> <firstname>cxx1</firstname> <lastname>Bob1</lastname> <nickname>stars1</nickname> <marks>85

Jiang216的博客 218

如何通过Davinci Configurator来新增一个BswM仲裁规则

详细介绍如何通过Davinci Configurator来新增一个BswM仲裁规则。

initiallizer的博客 771

52、切换线性动态系统:原理、挑战与高斯和滤波解决方案

本文介绍了切换线性动态系统(SLDS)的基本原理及其在复杂时间序列建模中的应用。SLDS结合了隐马尔可夫模型的离散状态切换与线性动态系统的连续状态演化,适用于系统动态发生跳跃的场景,如化工过程监测和金融市场分析。由于精确推理在计算上不可行,文章重点阐述了高斯和滤波这一近似方法,通过有限高斯混合来逼近后验分布,并详细描述了其递归更新、权重计算与组件合并流程。同时讨论了性能评估、优化策略及常见问题的解决方案,并展望了SLDS与深度学习、在线学习和多模态融合的未来发展方向。

algae的博客 161

解析xml文件的四种方式(dom & dom4j & jdom & sax)

建议采用dom4j解析xml文件: 测试类: package com.juchaosoft.test; import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.List; import java.util.Stack; import java...

weixin_30237281的博客 128

maya导入导出bvh 自动 脚本

maya打开bvh脚本

jacke121的专栏 1550

jdom (dom4j)解析xml出错、校验dtd文件不生效

jdom 或 dom4j读取xml文件时如何让dtd验证使用本地dtd文件或者不生效 一、写在所有之前: 因为dom4j和jdom在这个问题上处理的方法是一模一样的,只是一个是SAXBuilder 一个SAXReader,这里以jdom距离,至于dom4j只需要同理替换一下就可以了。 二、问题发生的情况 当你用jdom读取一个有dtd验证的xml文件,同时你的网络是不通的情况下。会出现

唯梦可寻 1338

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

DOM、SAX、JDOM、DOM4J四种方式解析xml文件

books.xml文件内容 冰与火之歌 乔治马丁 2014 89 安徒生童话 2004 77 English 1.DOM方式解析,官方提供,一次加载xml文件到内存中,对于xml文件过大的支持效率不好 public static void main(String[] args) { DocumentBuilderFact

Pionner17的博客 366

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

慕课学习笔记之DOM,SAX,JDOM,DOM4J解析XML文件

DOM,SAX,JDOM,DOM4J四种解析XML文件的方式,下面将使用这四种方式一一实践。 1.准备工作 自己先写一个test.xml,内容如下: <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframewo

小心蜡笔的博客 677

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

对DOM,SAX,JDOM,DOM4J四种方法解析XML文件的分析

1、DOM   与平台无关的官方解析方式   DOM是一次性把xml文件加载到内存中,形成一个节点树   对内存有要求 2、SAX   java提供的基于事件驱动的解析方式   每次遇到一个标签,会触发相应的事件方法 3、扩展方法JDOM,DOM4J   在基础方法上扩展出来的方法,只有Java平台有   转载于:https://www.cn...

weixin_30244889的博客 85

XML--jdom/dom4j/sax解析XML文件

XML1.XML(extensible markup language ):可扩展标记语言。2.XML特点是,标签可以由用户自己随意扩展。比如,html中标签如何写,属性如何写,属性值如何写,都是有规范的(w3c规定的)。但是在xml文件中,标签没有规范,可以随意扩展。3.XML文件有两个作用: (1)做其它技术的配置文件:<config> <nav> <color>red</co

yangruxi的博客 581

DOM、SAX、JDOM和DOM4J四种方式解析XML文件性能对比

1.定义Book类 package com.imooc.book; public class Book { //书的id private int id; //书名 private String name; //书的作者 private String author; //书的出版年份 private int year;

qq_33982037的博客 1023

DOM,SAX,JDOM,DOM4J四种xml文件解析方式小结

DOM和SAX解析方式为基础的解析方式,不需要进行任何jar包的导入操作。 JDOM和DOM4J只能够在java当中运行 DOM解析时,会一次性的将全部的xml文件当中的信息加载到内存当中形成一颗DOM树(当xml文件比较大时,加载时间会较长,且要求内存要足够的大),DOM树结构直观便于理解,且树结构保存在内存当中便于修改,但是xml文件太大的话,是用DOM方式解析xml会造成内存溢出。 S

青之羽 375

XML的四种解析方式

XML的解析方式有四种: DOM解析 SAX解析 DOM4J解析 JDOM解析 一、DOM解析: 与 js 中的类似,使用 JAXP(Java API for XML Parsing),即:用于 XML 解析的 Java API.DOM(Document Object Model, 文档对象模型),在应用程序中,基于 DOM 的 XML 分析器将一个 XML 文档转...

cui__shen的博客 4万+
上一篇: SAX解析xml
下一篇: 4种解析xml方式比较
Ce1estial
博客等级 码龄11年 6粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值