java dom4j解析xml 对象_Java XML解析 - 利用DOM4j解析XML
Java XML解析 - 利用DOM4j解析XML
dom4j是一个简单的开源库,用于处理XML、 XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集成了DOM,SAX和JAXP。dom4j是目前在xml解析方面是最优秀的(Hibernate、Sun的JAXM也都使用dom4j来解析XML),它合并了许多超出基本 XML 文档表示的功能,包括集成的 XPath 支持、XML Schema 支持以及用于大文档或流化文档的基于事件的处理。
1. Iterator迭代解析xml
//测试xml文件
hello Text1
hello Text2
hello Text3
world text1
world text2
world text3
/**
* dom4j读取并解析xml
*/
public class Dom4JTest2
{
public static void main(String[] args) throws Exception
{
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File("students.xml"));
// 获取根元素
Element root = document.getRootElement();
System.out.println("Root: " + root.getName());
// 获取所有子元素
List childList = root.elements();
System.out.println("total child count: " + childList.size());
// 获取特定名称的子元素
List childList2 = root.elements("hello");
System.out.println("hello child: " + childList2.size());
// 获取名字为指定名称的第一个子元素
Element firstWorldElement = root.element("world");
// 输出其属性
System.out.println("first World Attr: "
+ firstWorldElement.attribute(0).getName() + "="
+ firstWorldElement.attributeValue("name"));
System.out.println("迭代输出-----------------------");
// 迭代输出
for (Iterator iter = root.elementIterator(); iter.hasNext();)
{
Element e = (Element) iter.next();
System.out.println(e.attributeValue("name"));
}
System.out.println("用DOMReader-----------------------");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
// 注意要用完整类名
org.w3c.dom.Document document2 = db.parse(new File("students.xml "));
DOMReader domReader = new DOMReader();
// 将JAXP的Document转换为dom4j的Document
Document document3 = domReader.read(document2);
Element rootElement = document3.getRootElement();
System.out.println("Root: " + rootElement.getName());
}
}
代码运行后输出:
Root: students
total child count: 6
hello child: 3
first World Attr: name=wangwu
迭代输出-----------------------
lisi
lisi2
lisi3
wangwu
wangwu2
null
用DOMReader-----------------------
Root: students
2. 使用xpath解析XML
//studentInfo.xml
崔卫兵
PC学院
62354666
男,1982年生,硕士,现就读于北京邮电大学
cwb
PC学院
62358888
男,1987年生,硕士,现就读于中国农业大学
xxxxx
xxx学院
66666666
注视中,注释中
lxx
yyyy学院
88888888
注视中111,注释中222
/**
* 利用dom4j与XPath进行XML解析
*/
public class Dom4jReadExmple {
/**
* 利用XPath操作XML文件,获取指定节点或者属性的值,并放入HashMap中
* @param filename String 待操作的XML文件(相对路径或者绝对路径)
* @param hm HashMap 存放选择的结果,格式:或者
*/
public void getSelectedNodeValue(String filename, HashMap < String, String > hm) {
try {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File(filename));
//获取学生姓名为"崔卫兵"的年龄
List list = document.selectNodes("/students/student[name=\"崔卫兵\"]/@age");
Iterator iter = list.iterator();
if (iter.hasNext()) {
Attribute attribute = (Attribute) iter.next();
hm.put("崔卫兵-" + attribute.getName(), attribute.getValue());
} else {
hm.put("崔卫兵-age", "20");
}
//获取学生姓名为"崔卫兵"的年龄
list = document.selectNodes("/students/student[name=\"cwb\"]/@age");
iter = list.iterator();
if (iter.hasNext()) {
Attribute attribute = (Attribute) iter.next();
hm.put("cwb-" + attribute.getName(), attribute.getValue());
} else {
hm.put("cwb-age", "20");
}
//获取学生姓名为"cwb"所在的学院名称
list = document.selectNodes("/students/student[name=\"cwb\"]/college");
iter = list.iterator();
if (iter.hasNext()) {
Element element = (Element) iter.next();
String name = element.getName();
String value = element.getText();
hm.put("cwb-" + name, value);
}
//获取学生姓名为"cwb"所在学院的领导
list = document.selectNodes("/students/student[name=\"cwb\"]/college/@leader");
iter = list.iterator();
if (iter.hasNext()) {
Attribute attribute = (Attribute) iter.next();
hm.put("cwb-college-" + attribute.getName(), attribute.getValue());
} else {
hm.put("cwb-college-leader", "leader");
}
//获取学生姓名为"lxx"所在的学院名称
list = document.selectNodes("/students/student[name=\"lxx\"]/college");
iter = list.iterator();
if (iter.hasNext()) {
Element element = (Element) iter.next();
String name = element.getName();
String value = element.getText();
hm.put("lxx-" + name, value);
}
//获取学生姓名为"lxx"所在学院的领导
list = document.selectNodes("/students/student[name=\"lxx\"]/college/@leader");
iter = list.iterator();
if (iter.hasNext()) {
Attribute attribute = (Attribute) iter.next();
hm.put("lxx-college-" + attribute.getName(), attribute.getValue());
} else {
hm.put("lxx-college-leader", "leader");
}
} catch(Exception ex) {
ex.printStackTrace();
}
}
}
/**
* 测试Dom4jReadExmple解析的情况
*/
public class TestDom4jReadExmple {
public static void main(String[] args) {
try{
//获取解析完后的解析信息
HashMap hashMap;
Dom4jReadExmple drb=new Dom4jReadExmple();
//利用XPath操作XML文件,获取想要的属性值
hashMap = new HashMap();
drb.getSelectedNodeValue("studentInfo.xml", hashMap);
System.out.println("崔卫兵-age:"+hashMap.get("崔卫兵-age"));
System.out.println("cwb-age:"+hashMap.get("cwb-age"));
System.out.println("cwb-college:"+hashMap.get("cwb-college"));
System.out.println("cwb-college-leader:"+hashMap.get("cwb-college-leader"));
System.out.println("lxx-college:"+hashMap.get("lxx-college"));
System.out.println("lxx-college-leader:"+hashMap.get("lxx-college-leader"));
}catch(Exception ex){
ex.printStackTrace();
}
}
}
运行结果
崔卫兵-age:25
cwbage:20
cwb-college:PC学院
cwb-college-leader:学院领导
lxx-college:yyyy学院
lxx-college-leader:leader
总结
DOM4j解析XML推荐使用xpath,xpath功能是非常强大的。
版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。
java dom4j解析xml 对象_Java XML解析 - 利用DOM4j解析XML相关推荐
- java 解析xml 对象_Java反射——读取XML文件,创建对象
读取XML文件,创建对象 config.xml import java.io.*; import java.lang.reflect.Constructor; import javax.xml.par ...
- java转json数组对象_java对象转json、json数组 、xml | 学步园
JSON-lib这个Java类包用于把bean,map和XML转换成JSON并能够把JSON转回成bean和DynaBean. 下载地址:http://json-lib.sourceforge.net ...
- java流式传输对象_Java性能:面向教学与流式传输
java流式传输对象 在for循环中向上或向下计数是最有效的迭代方式吗? 有时答案既不可行. 阅读这篇文章,了解不同迭代品种的影响. 迭代性能 关于如何以高性能进行迭代有很多观点. Java中的传统迭 ...
- java类怎么删除对象_java中对象的生成使用和删除
请教大神,在java里,对象生成后,如何删除对象呢?请教大神,在java里,对象生成后,如何删除对象呢? 对象状态由JVM自动管理,GC线程自动回收无用对象,无需也不能自己删除对象. 请问在JAVA中 ...
- java比较两个对象_java判断两个对象是否相等的方法
java判断两个对象是否相等的方法 发布时间:2020-06-25 13:48:38 来源:亿速云 阅读:197 作者:Leah 这期内容当中小编将会给大家带来有关java判断两个对象是否相等的方法, ...
- java xml 拆分_java – 如何使用VTDGenHuge将大型xml拆分成小块?
我想将大型xml分成小块.我正在使用VTDGen将xml文件拆分成小块,它适用于文件大小< 2 GB. VTD-xml使用IN-Memory来解析xml,我不想将xml加载到内存中.所以我试图使 ...
- java 解析 svg文件_java – 如何加载和解析SVG文档
概观 使用Apache Batik加载和解析SVG文件.该解决方案在将SVG文件转换为MetaPost的初步阶段显示Java代码.这应该提供有关如何使用Java从SVG文件加载,解析和提取内容的一般概 ...
- java中拼接xml方法_Java常用工具类,拼接XML格式的字符串,非常好用
import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedHashMap; import java.u ...
- java token生成和验证_Java Token登录验证 生成解析Token
借鉴参考 Java Token登录验证 使用jjwt生成和解析JWT java基于token验证之登陆验证 等 什么是Token? 我的理解来说 token就是你访问服务器的口令,只要token合法, ...
最新文章
- nginx+tomcat实现集群负载均衡(实现session复制)
- nvidia 英伟达 显卡 GPU 的计算能力
- SQL SERVER SQLOS的任务调度--微软亚太区数据库技术支持组 官方博客
- 数据结构特性解析 (二) ArrayList
- launch mode 应用场景
- 考研院校选择【2022 考研 定专业就要这三步——专业必知、专业初选与精选】
- Apple 的CEO 吹响了战斗的号角啦!
- P4103 [HEOI2014]大工程
- “约见”面试官系列之常见面试题之第六十八篇之本地对象 内置对象 宿主对象(建议收藏)
- 工业大数据全景解读和应用案例
- 照片识别出错_AI跨年龄人脸识别技术在跨年龄寻亲的应用简析
- C语言fgets函数了解
- 《北京IT报道》你可以成为下一个《万万没有想到》?
- 软件开发中的V字模型与W模型(使开发与侧试分离)
- Office And PDF 病毒分析工具
- iVMS-4200 Mac 版监控客户端切换中文语言的方法
- 易语言画板组件实现自绘圆形进度条源码
- 单片机程序编写常使用的程序架构
- 支付宝支付对账单java_java下载支付宝对账单,实现与支付宝实收对账和日清日结对账...
- 应用于arcgis的代码,长期更新…
热门文章
- #!/usr/bin/env与#!/usr/bin/
- 这是你掉的“原型与原型链”吗?快捡起来吧!》(^o^)《
- Rust之impl关键字
- JS 数字千位分隔符且保留两位小数
- web网页设计与开发:个人明星介绍主题网站设计——张艺兴(10页) HTML+CSS+JavaScript 大学生简单个人静态HTML网页设计作品 DIV布局个人介绍网页模板代码 网页设计作业...
- java 输入流退出阻塞_退出旋流虚空
- c# cntk 模型复制_CNTK-分类模型
- 千万不要在国内某软件站下载 Chrome,已有网友中招!
- 如此惊人的营销成果!这款游戏究竟怎么做到的?
- Linux——光盘写入工具