Jdom解析嵌套XML<一>

本博文主要采用Jdom对XML 进行了详细的解析(包括了嵌套的XML、XML格式的字符串、XML文件以及XPATH的使用等等),基本能够满足了平时工作之中所遇到的所有解析XML 工作。


搭建Jdom 解析环境
        给项目添加资源jar包:jdom-2.0.1.jar
具体解析方法

        Jdom 的解析器(SAXBuilder)在org.jdom2.input.*这个包里,其中的DOMBuilder 的功能是将DOM 模型的Document解析成Jdom 模型的Document;SAXBuilder 的功能是从文件或者流中解析解析出符合JDOM模型的XML树。


①解析XML 文件的代码

 

// 创建一个 SAXBuilder
SAXBuilder saxBuilder = new SAXBuilder();

try {
// 给XML 文件构造一个Document
Document document = saxBuilder.build("resources/Classinfo.xml");

// 获取根元素
Element root = document.getRootElement();

} catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();

}

 

②解析XML 字符串的代码

 

// 创建测试 XML
String xmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+"<class>"
+"<name>五年级</name>"
+"<teacher>张老师</teacher>"
+"<students>"
+"<student schoolNo=\"5001\"><name>小明</name><sex>男</sex></student>"
+"<student schoolNo=\"5002\"><name>小红</name><sex>女</sex></student>"
+"</students>"
+"</class>";

// 创建一个字符串的字符流
StringReader reader = new StringReader(xmlString);

// 创建新的输入源 SAX 解析将使用的InputSource 对象来读取 XML 
InputSource source = new InputSource(reader);

// 创建一个 SAXBuilder
SAXBuilder saxBuilder = new SAXBuilder();

try {
// 通过输入源构造一个Document
Document document = saxBuilder.build(source);

// 获取根元素
Element root = document.getRootElement();

} catch (JDOMException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
} catch (IOException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}

  PS:其实解析XML 格式的字符串就是解析XML 流!


Jdom的Element 对象常用的方法:

 

方  法 说  明
getChild("childname")返回指定名字的子节点,如果同一级有多个同名子节点,则只返回第一个;如果没有返回null值。
getChildren("childname")返回指定名字的子节点List集合。这样你就可以遍历所有的同一级同名子节点。
getAttributeValue("name")返回指定属性名字的值。如果没有该属性则返回null,有该属性但是值为空,则返回空字符串。
getChildText("childname")返回指定子节点的内容文本值。
getText()返回该元素的内容文本值。

 

完整解析代码

/**
 * Create by iflytekwill@qq.com in 2012-5-15
 */
package com.javawill.analysis;

import java.io.IOException;
import java.io.StringReader;
import java.util.Iterator;
import java.util.List;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.xml.sax.InputSource;

/**
 * 解析 XML 字符串类
 * @author <a href="mailto:iflytekwill@qq.com">WillKinG</a>
 * @version 1.0
 */
public class AnalysisXmlString {
	/**
	 * 解析方法
	 */
	public void analysis(){
		// 创建测试 XML
		String xmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
			+"<class>"
			+"<name>五年级</name>"
			+"<teacher>张老师</teacher>"
			+"<students>"
			+"<student schoolNo=\"5001\"><name>小明</name><sex>男</sex></student>"
			+"<student schoolNo=\"5002\"><name>小红</name><sex>女</sex></student>"
			+"</students>"
			+"</class>";
		
		// 创建一个字符串的字符流
		StringReader reader = new StringReader(xmlString);
		
		// 创建新的输入源 SAX 解析将使用的InputSource 对象来读取 XML 
		InputSource source = new InputSource(reader);
		
		// 创建一个 SAXBuilder
		SAXBuilder saxBuilder = new SAXBuilder();
		
		try {
			// 通过输入源构造一个Document
			Document document = saxBuilder.build(source);
			
			// 获取根元素
			Element root = document.getRootElement();
			
			// 获取Class 信息
			String clzName = root.getChildText("name");
			String clzTeacher = root.getChildText("teacher");
			System.out.println("Class Name:" + clzName + ";Class Teacher:" + clzTeacher);
			
			// 解析班级中的学生
			Element stuRoot = root.getChild("students");
			List list = stuRoot.getChildren("student");
			System.out.println("---- 班级共有" + list.size() + "名学生 ----");
			
			for (Iterator it = list.iterator(); it.hasNext();) {
				Element student = (Element) it.next();
				
				// 获取Student 信息
				String stuNo = student.getAttributeValue("schoolNo");
				
				String stuName = student.getChildText("name");
				String stuSex = student.getChildText("sex");
				
				System.out.println("Student No:" + stuNo + ";Student Name:" + stuName + ";Student Sex:" + stuSex);
			}
		} catch (JDOMException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/**
	 * 执行方法
	 * @param args
	 */
	public static void main(String[] args) {
		AnalysisXmlString analysisXml = new AnalysisXmlString();
		analysisXml.analysis();
	}
}

运行上面的代码,控制台返回值

Class Name:五年级;Class Teacher:张老师
---- 班级共有2名学生 ----
Student No:5001;Student Name:小明;Student Sex:男
Student No:5002;Student Name:小红;Student Sex:女
 

 

     小弟技术有限,第一次写技术博文,其中多有不合理的、错误的地方,还请各位大虾见谅指正。

kettle解析xml多层分组嵌套数据,StAX方法,完整解析案例(包含xml文件以及ktr文件) kettle 解析xml数据,xml多层分组嵌套,xml stax方法,完整解析案例使用(包含xml文件以及ktr文件)。ETL大数据迁移,数据清洗。XML Input Stream (StAX) 方法 立即下载

相关推荐

用SOEM库搞定汇川SV660N伺服电机:一个Linux C程序员的EtherCAT实战笔记

本文详细介绍了如何在Linux系统下使用SOEM库驱动汇川SV660N伺服电机,包括环境搭建、EtherCAT从站设备识别、PDO映射配置、状态机切换与运动控制等关键步骤。通过实战代码示例和常见问题排查指南,帮助开发者快速掌握工业自动化中的EtherCAT通信技术,实现对伺服电机的精准控制。

weixin_29185199的博客 424

Jdom解析多层xml文件

Jdom解析多层xml文件 一、Jdom简介: JDOM是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。     JDOM 直接为JAVA编程服务。它利用更为强有力的JAVA语言的诸多特性(方法重载、集合概念以及映射),把SAX和DOM的功能有效地结合起来。 在使用设计上尽可能地隐藏原来使用XML过程中的复杂性。利用JDOM处理XML文档

md_shmily92的专栏 1724

Linux脚本实战之SSH执行远端脚本

Linux脚本实战之SSH连接主机

jks212454的博客 2134

java中 使用jdom 解析和生成循环嵌套的xml格式文件

        xml 和bean的相互转换。在公司里很多接口的实现都是通过请求xml参数,得到xml后进行解析然后获取需要的信息,最后还要返回xml格式的参数来进行验证。因此这里介绍一种开源项目JDOM来解析和生成xml,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。JDOM 直接为JAVA编程服务。它利用更为强有力的JAVA语言的诸多特性(方法重载、集合概...

小鑫lay的博客 1884

LiveBOS UploadFile.do 任意文件上传漏洞复现(XVE-2023-21708)

LiveBOS UploadFile.do 接口存在任意文件上传漏洞,未经身份验证的攻击者可通过该漏洞在服务器端任意执行代码,写入后门,获取服务器权限,进而控制整个web服务器。

0xSec 2421

华为OD机试 - 矩形绘制 - 数组、坐标偏移(Python/JS/C/C++ 双机位C卷 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。实现一个简单的绘图模块,绘图模块仅支持矩形的绘制和擦除。 当新绘制的矩形与已有图形重叠时,对图形取并集; 当新擦除的矩形与已有图形重叠时,对图形取差集。 给定一系列绘制和擦除操作,计算最终图形的面积。第一行为操作数N,接下来的N行格式为:d x1

学Java,找哪吒 835

Java中对XML字符串的处理(JDOM方式)

实际平常我们用到解析xml大部分都是拿文件去处理,直接用xml字符串的比较少的,实际好好的分析一下,两者之间的转换,就会发现,就是文件流和字节流之间的转换喽,接下来开始代码分析: 1.代码部分: import java.io.StringReader; import java.util.List; import org.jdom.Document; import org.jdom.Elem...

醉梦洛的博客 1048

RH850从0搭建Autosar开发环境【6】- Davinci Configurator之CanIf模块配置详解(下)

RH850从0搭建Autosar开发环境【6】- Davinci Configurator之CanIf模块配置详解(下)

weixin_42412049的博客 2584

java 多级嵌套xml文件夹,kettle解析多层分组嵌套XML,完整解析案例(包含xml、ktr文件)-xml文件...

简介通过ETL kettle获取XML中的数据,采用XML Input Stream (StAX) 方法实现将多层分组嵌套XMl中数据读出来,将非结构化数据结构化,并可以直接存入关系型数据库中。本文通过完整解析案例(包含xml、ktr文件),手把手教你获取XML中数据。废话不多说,开始直接干。XML文件内容一种双密封悬臂梁式传感器流量计结构本发明提出了一种双密封悬臂梁式传感器流量计结构。发明专利申...

weixin_33617691的博客 1303

基于Simulink的电机功率因数校正仿真

PF=SP​=视在功率有功功率​=cosϕ⋅Irms​I1​​(非正弦时)位移因数(cosϕ):基波电压电流相位差畸变因数(I1​/Irms​):谐波导致电流有效值增大本文带你完成了电机系统功率因数校正的Simulink仿真,实现了:✅ 理解了低功率因数的成因与危害✅ 搭建了无PFC、无源PFC、有源PFC三种对比模型✅ 掌握了Vienna整流器建模与dq解耦控制方法✅ 实现了PF与THD的自动计算与评估✅ 验证了有源PFC在PF、THD、稳定性上的全面优势。

amy_mhd的博客 154

ACS运动控制器编程语言

ACS运动控制器采用SPiiPlusLanguage(SPL)作为核心编程语言,该语言基于C语法设计,内置丰富的运动控制指令,支持点位运动、插补等复杂控制。控制器提供专用开发工具SPiiPlusManager和ACSStudio,支持图形化编程与调试。同时兼容TCP/IP、EtherCAT等多种扩展接口,便于与上位机或PLC集成。使用时需注意实时性优先级、轴参数匹配等关键事项。官方文档和示例程序为开发者提供了完善的学习资源。

StevenChen的博客 617

kettle解析xml数据,并且入库到oracle

接入xml数据的控件入图 从该控件的解释中可以得到信息,获取数据要用到xpath 学习xpath,可以百度xpath,例如菜鸟教程中的https://www.runoob.com/xpath/xpath-examples.html 添加文件,books.xml 可以自动获取xml结构的路径 之后可以自动获取字段,其中第一个是属性字段,需要手动添加, 预览数据 之...

刘涛的博客 8923

华为OD统一考试 - 模拟消息队列(Java & Python& JS & C++ & C )

让我们来模拟一个消息队列的运作,有一个发布者和若干消费者,发布者会在给定的时刻向消息队列发送消息,

算法大师! 3518

jdom2解析嵌套XML

import java.io.IOException; import java.io.StringReader; import java.util.HashMap; import java.util.List; import java.util.Map;import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.JDOM

luojinbai的专栏 1098

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

SAX解析多层嵌套XML

今天研究了下xml的解析,总结下: beauties.xml<?xml version="1.0" encoding="UTF-8"?> <Root> <Result>1</Result> <Message>查询成功</Message> <BookCode>20160720_D018</BookCode> <OrderDate>2016/7/20 17:11:09</OrderDate> <Con

donglindonglin的博客 4872

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

JDOM获取子节点时候,有时候需要命名空间

NamsSpace

菜菜De学习 276

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

java解析嵌套xml

主题代码package xml;import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import ja

聋的传人 2141

读取xml文件 解析双层xml

1、读取本地xml文件 /** * 加载本地配置文件 * @author HuangXuebin * @date 2012-10-11 * @Version V 1.0 */ public class LoadConfig { private static Logger logger = Logger.getLogger(LoadConfig.class); private stati

sunny的专栏 5190

不能嵌套解析xml

解析出type ,再根据type类型 ,在解析类里再解析 数据流,这样会在 xp.setInput(xmlStream, “utf-8”);卡死

小码哥的博客 466

Java解析xml获取根节点和子节点

XML 指可扩展标记语言(EXtensible Markup Language)。 XML 是一种很像HTML的标记语言。 XML 的设计宗旨是传输数据,而不是显示数据。 XML 标签没有被预定义。您需要自行定义标签。 XML 被设计为具有自我描述性。 XML 是 W3C 的推荐标准。 1.准备xml文件 <?xml version="1.0" encodin...

数据工匠记 3万+
上一篇: 此去经年,我还年轻吗?
下一篇: Jdom解析嵌套XML<一>
iflytekwill
博客等级 码龄14年 0粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值