java学习笔记:使用dom4j解析xml
2016-02-29 00:00
826 查看
摘要: 使用dom4j方法解析xml文件,以及e.elementText()、e.element()、e.elements()三种方法的区别
最近写程序需要用java解析xml文件,于是在网上借鉴了一下“残缺的孤独”的博客,使用了dom4j方法。
xml格式如下:
解析的核心代码:
其中该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)。
最近写程序需要用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)。
相关文章推荐
- java解析xml之dom4j解析xml示例分享
- java使用dom4j解析xml配置文件实现抽象工厂反射示例
- dom4j创建及解析XML文件
- XML文档解析
- JAVA使用Dom4j实现字符串和xml文件相互转换
- Dom4j解析xml文件-操作节点和属性及写入其他xml文件
- dom4j生成/解析XML
- dom4j解析xml
- xml解析-dom4j(比较流行,第三方提供)
- DOM,SAX,JDOM,DOM4J 四种方式解析xml
- dom4j解析XML 多层标签
- Dom4j解析XML
- 采用DOM4j操作XML数据库完整实例
- 拆解身份证的工具类
- java wordpress密码加密
- java自动类型转换
- Spring 中配置申明式的配置信息
- Java 集合系列目录(Category)
- Java 多线程系列目录(共43篇)
- openstack-ice版的eclipse环境配置