文档章节

java学习笔记:使用dom4j解析xml

Ritajiao
 Ritajiao
发布于 2016/02/29 22:02
字数 512
阅读 38
收藏 0

最近写程序需要用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)。

 

© 著作权归作者所有

Ritajiao
粉丝 0
博文 10
码字总数 6835
作品 0
保定
私信 提问
XML解析(DOM、SAX、JDOM和DOM4J)

众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM、SAX、JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml-apis.jar包里 SA...

拷贝忍者卡卡习
2017/01/18
31
0
java解析xml文件四种方式介绍、性能比较和基本使用方法

一、基本介绍: 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特...

Candy_Desire
2014/08/20
1K
0
java解析xml的四种方法汇总

众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM、SAX、JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml-apis.jar包里 SA...

LYQ1990
2017/10/26
32
0
xml java应用(DOM、SAX、JDOM、DOM4j)简介比较

dom是解析xml的底层接口之一(另一种是sax) 而jdom和dom4j则是基于底层api的更高级封装 dom是通用的,而jdom和dom4j则是面向java语言的 DOM 是用与平台和语言无关的方式表示 XML 文档的官方 ...

liangyx
2012/12/20
194
0
Android 创建与解析XML(五)—— Dom4j方式

1、Dom4j概述 dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platform using the Java Collections Framework and with full support fo......

长平狐
2013/01/06
110
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
1K
12
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
22
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
17
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
27
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部