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相关推荐

  1. 安卓学习笔记30:解析XML与JSON

    文章目录 零.学习目标 一.解析XML (一)XML概述 (二)解析XML的方法 二.案例演示 - 读取解析XML (一)运行效果 (二)涉及知识点 (三)实现步骤 1.创建安卓应用[ReadPars ...

  2. Javaweb学习笔记——使用Jdom解析xml

    一.前言 Jdom是什么? Jdom是一个开源项目,基于树形结构,利用纯java的技术对XML文档实现解析,生成,序列化以及多种操作.它是直接为java编程服务,利用java语言的特性(方法重载,集合 ...

  3. 【Java中级篇】Dom4j解析xml数据

    一.依赖 <dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId> ...

  4. Java案例:利用dom4j解析XML文件

    文章目录 一.XML概述 二.dom4j概述 (一)什么是dom4j (二)解析XML性能优异 (三)dom4j针对XML标准定义的实现 三.dom4j使用示例 (一)创建Maven项目 (二)解析X ...

  5. 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 ...

  6. Java学习笔记-Spring IoC 通过XML把Bean给IoC容器

    运行截图如下: 程序结构: 源码如下: Bean.java package springioc.demo.bean;public class Bean {public Bean(){System.ou ...

  7. Dom4j 解析Xml文档及 XPath查询 学习笔记

    2019独角兽企业重金招聘Python工程师标准>>> 本文查阅方法:     1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题     2.快捷"查找" ...

  8. Dom4j 解析Xml文档及XPath查询 学习笔记

    本文查阅方法:     1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题     2.快捷"查找" -- 在当前浏览器页面,按键 "Ctrl+F" 按键 ...

  9. 【学习笔记】关于DOM4J:使用DOM4J解析XML文档

    一.概述 DOM4J是一个易用的.开源的库,用于XML.XPath和XSLT中.采用了Java集合框架并完全支持DOM.SAX.和JAXP. DOM4J最大的特色是使用大量的接口,主要接口都在org. ...

  10. Java 使用 Dom4j 解析 XML 指南

    Java 使用 Dom4j 解析 XML 指南 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用 ...

最新文章

  1. 人类的思维方式有哪些?【达克效应】
  2. mysql选什么隔离级别_互联网项目中mysql应该选什么事务隔离级别
  3. 杂记2:VS2013创建Windows服务实现自动发送邮件
  4. java.net.ConnectException: Connection refused 异常
  5. 黑页php,炫酷帅气的黑页源码
  6. GdiPlus[38]: IGPGraphicsPath (五) 路径标记
  7. python制作自动回复脚本_python itchat实现微信自动回复的示例代码
  8. Windows 10 2022 年更新来了!
  9. 粗暴,干就完了----徐晓冬似的C语言自学笔记-----实现一个链表结构
  10. ubuntu 开启 rewrite 模块
  11. 直播预告丨Oracle DataGuard 备份恢复最佳实践
  12. 隐马尔可夫模型(五)——隐马尔可夫模型的解码问题(维特比算法)
  13. 刚发布!开发者调查报告:机器学习/深度学习算法工程师急缺
  14. 免安装Oracle客户端使用PL/SQL连接Oracle
  15. 解决eclipse中git中cannot open git-upload-pack(无法打开Git上传包)问题
  16. 阶段3 1.Mybatis_09.Mybatis的多表操作_7 mybatis多对多准备角色表的实体类和映射配置...
  17. LINUX下载编译YASM
  18. 数字图像处理MFC程序设计之灰度图像的线性变换
  19. Git和Cmake下载超级慢的解决方案
  20. 收到offer不想去,如何优雅拒绝?

热门文章

  1. Oracle数据库查看表空间sql语句、查看Oracle数据库表空间剩余 、修改表空间、库备份
  2. Visual Studio 2010软件安装教程
  3. linux ssh服务的优化,SSH服务端配置、优化加速、安全防护
  4. 美特斯邦威java面试_在美特斯邦威工作一个月,我学到了什么
  5. mybatis 自定义函数_JDK动态代理一定要有代理对象吗?请你结合Mybatis回答
  6. java复制两个对象报异常_Java中复制两个不同类的对象的属性
  7. 设置在本文件里查找_Win 10 自带聚焦搜索?这么设置轻松查找电脑文件
  8. php+mysql文件上传,使用PHP将文件上传到MySql DB
  9. nginx利用referer指令实现防盗链配置
  10. jQuery成为微软.NET开发工具的一部分了