java学习笔记:使用dom4j解析xml
2019独角兽企业重金招聘Python工程师标准>>>
最近写程序需要用java解析xml文件,于是在网上借鉴了一下“残缺的孤独”的博客,使用了dom4j方法。
xml格式如下:
解析的核心代码:
@SuppressWarnings({ "unchecked", "rawtypes" })
public Proposal parseXml(String xmlPath) throws IOException{ Proposal proposal=new Proposal(); File Xml=new File(xmlPath); SAXReader saxReader = new SAXReader(); try { Document document = saxReader.read(Xml); //读取文件,转化为Document Element root = document.getRootElement();//获取xml的根节点 List<Element> elementList = root.elements();//获取根节点之下的各子节点 for (Element e : elementList) {//foreach遍历 //title if(e.elementText("AwardTitle")!=null){ if(!e.elementText("AwardTitle").equals("")) proposal.setTitle(e.elementText("AwardTitle").replaceAll("& ","").trim()); System.out.println("title:"+proposal.getTitle()); } //awarded_amount if(e.elementText("AwardAmount")!=null){ if(!e.elementText("AwardAmount").equals("")) proposal.setAwarded_amount(e.elementText("AwardAmount").trim()); System.out.println("awarded_amount:"+proposal.getAwarded_amount()); } //nsf_directorate Element Organization=e.element("Organization"); if(Organization!=null){ Element Directorate=Organization.element("Directorate"); if(Directorate!=null){ if(Directorate.elementText("LongName")!=null){ if(!Directorate.elementText("LongName").equals("")) proposal.setNsf_directorate(Directorate.elementText("LongName").replaceAll("& ", "").trim()); System.out.println("nsf_directorate:"+proposal.getNsf_directorate()); } } } } //program_element_code List<String> Listprogram_element_code=new ArrayList(); List<Element> ListProgramElement=new ArrayList(); ListProgramElement=e.elements("ProgramElement"); for(Element ProgramElement:ListProgramElement){ System.out.println("program_element_code:"+ProgramElement.elementText("Code").trim()); Listprogram_element_code.add(ProgramElement.elementText("Code").trim()); } if(Listprogram_element_code.size()!=0) proposal.setProgram_element_code(Listprogram_element_code); }catch (DocumentException e) { System.out.println(e.getMessage()); } return proposal;
}
其中该xml的根节点即为award,AwardTitle、AwardAmount等均为根节点之下的子节点。
先介绍一下e.elementText()、e.element()、e.elements()三种方法的区别:e.elementText("AwardTitle")返回的是以AwardTitle为名的节点的文本的值,返回的类型是String;e.element("Organization")返回的是以Organization为名的结点,返回类型为Element;e.elements(“ProgramElement”)返回的是以ProgramElement为名的所有节点(即有多个同名节点时使用该方法),返回类型为List。
像AwardTitle、AwardAmount一般的节点,使用e.elementText()方法即可;像Value这种子节点,需要先使用e.element()方法获得Organization节点,之后e.elementText()返回文本部分;而像ProgramElement有多个,需要定义一个List,使用e.elements()方法。
特别注意:在写程序过程中,我还遇到空指针NullPointerException异常,原因是当该节点不存在时,找不到该节点,则会报空指针异常错误。我解决的办法是在将数据set到数据库之前加了判断语句 if(e.elementText("AwardTitle")!=null)。
转载于:https://my.oschina.net/u/2619218/blog/626160
java学习笔记:使用dom4j解析xml相关推荐
- 安卓学习笔记30:解析XML与JSON
文章目录 零.学习目标 一.解析XML (一)XML概述 (二)解析XML的方法 二.案例演示 - 读取解析XML (一)运行效果 (二)涉及知识点 (三)实现步骤 1.创建安卓应用[ReadPars ...
- Javaweb学习笔记——使用Jdom解析xml
一.前言 Jdom是什么? Jdom是一个开源项目,基于树形结构,利用纯java的技术对XML文档实现解析,生成,序列化以及多种操作.它是直接为java编程服务,利用java语言的特性(方法重载,集合 ...
- 【Java中级篇】Dom4j解析xml数据
一.依赖 <dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId> ...
- Java案例:利用dom4j解析XML文件
文章目录 一.XML概述 二.dom4j概述 (一)什么是dom4j (二)解析XML性能优异 (三)dom4j针对XML标准定义的实现 三.dom4j使用示例 (一)创建Maven项目 (二)解析X ...
- java学习笔记(12) —— Struts2 通过 xml /json 实现简单的业务处理
XML 1.引入dom4j-2.0.0.jar 2.引入jquery-1.8.2.js 3.新建common.js getInfo = function(){$.post("getXmlAc ...
- Java学习笔记-Spring IoC 通过XML把Bean给IoC容器
运行截图如下: 程序结构: 源码如下: Bean.java package springioc.demo.bean;public class Bean {public Bean(){System.ou ...
- Dom4j 解析Xml文档及 XPath查询 学习笔记
2019独角兽企业重金招聘Python工程师标准>>> 本文查阅方法: 1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题 2.快捷"查找" ...
- Dom4j 解析Xml文档及XPath查询 学习笔记
本文查阅方法: 1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题 2.快捷"查找" -- 在当前浏览器页面,按键 "Ctrl+F" 按键 ...
- 【学习笔记】关于DOM4J:使用DOM4J解析XML文档
一.概述 DOM4J是一个易用的.开源的库,用于XML.XPath和XSLT中.采用了Java集合框架并完全支持DOM.SAX.和JAXP. DOM4J最大的特色是使用大量的接口,主要接口都在org. ...
- Java 使用 Dom4j 解析 XML 指南
Java 使用 Dom4j 解析 XML 指南 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用 ...
最新文章
- 人类的思维方式有哪些?【达克效应】
- mysql选什么隔离级别_互联网项目中mysql应该选什么事务隔离级别
- 杂记2:VS2013创建Windows服务实现自动发送邮件
- java.net.ConnectException: Connection refused 异常
- 黑页php,炫酷帅气的黑页源码
- GdiPlus[38]: IGPGraphicsPath (五) 路径标记
- python制作自动回复脚本_python itchat实现微信自动回复的示例代码
- Windows 10 2022 年更新来了!
- 粗暴,干就完了----徐晓冬似的C语言自学笔记-----实现一个链表结构
- ubuntu 开启 rewrite 模块
- 直播预告丨Oracle DataGuard 备份恢复最佳实践
- 隐马尔可夫模型(五)——隐马尔可夫模型的解码问题(维特比算法)
- 刚发布!开发者调查报告:机器学习/深度学习算法工程师急缺
- 免安装Oracle客户端使用PL/SQL连接Oracle
- 解决eclipse中git中cannot open git-upload-pack(无法打开Git上传包)问题
- 阶段3 1.Mybatis_09.Mybatis的多表操作_7 mybatis多对多准备角色表的实体类和映射配置...
- LINUX下载编译YASM
- 数字图像处理MFC程序设计之灰度图像的线性变换
- Git和Cmake下载超级慢的解决方案
- 收到offer不想去,如何优雅拒绝?
热门文章
- Oracle数据库查看表空间sql语句、查看Oracle数据库表空间剩余 、修改表空间、库备份
- Visual Studio 2010软件安装教程
- linux ssh服务的优化,SSH服务端配置、优化加速、安全防护
- 美特斯邦威java面试_在美特斯邦威工作一个月,我学到了什么
- mybatis 自定义函数_JDK动态代理一定要有代理对象吗?请你结合Mybatis回答
- java复制两个对象报异常_Java中复制两个不同类的对象的属性
- 设置在本文件里查找_Win 10 自带聚焦搜索?这么设置轻松查找电脑文件
- php+mysql文件上传,使用PHP将文件上传到MySql DB
- nginx利用referer指令实现防盗链配置
- jQuery成为微软.NET开发工具的一部分了