Dom4j解析xml文档

本文介绍DOM4j——一款高性能的Java API,用于读写XML文档。文章详细阐述了如何利用DOM4j进行XML解析的基本步骤,并通过具体示例展示了获取XML节点信息的过程。

一.前言
dom4j是一套非常优秀的Java开源api,主要用于读写xml文档,具有性能优异、功能强大、和非常方便使用的特点。 另外xml经常用于数据交换的载体,像调用webservice传递的参数,以及数据做同步操作等等, 所以使用dom4j解析xml是非常有必要的。

二.准备
自己在网上下载dom4j.jar

三.实战
实现思路:
<1>根据读取的xml路径,传递给SAXReader之后 返回一个Document文档对象;
<2>然后操作这个Document对象,获取下面的节点以及子节点的信息;

“`
package com.jlu.cn.experiment;

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import com.jlu.xmlparser.contest;

public class PubmedParser {

/**
 * @param args
 */
public static void main(String[] args) {



     try {
        //创建SAXReader读取器,专门用于读取xml
         SAXReader reader=new SAXReader();
         //创建一个Document对象
         Document doc = reader.read("C:\\Users\\Administrator\\Desktop\\paper\\ literature\\meldd002.xml");
        //获取根节点对象
         Element rootElement=doc.getRootElement();
         System.out.println("根节点的名称"+rootElement.getName());
        System.out.println("节点属性的数目"+rootElement.attributeCount());
        System.out.println("根节点内文本"+rootElement.getText());

         //获取子节点,通过element("子节点名称的方法获取"),可以连续使用
        Element ele=rootElement.element("MedlineCitation");
         System.out.println(ele.getName());
         System.out.println(ele.attributeCount());
         System.out.println(ele.getText());


         //数据集中,有一些数据有一些数据便签格式并不统一,所以要判断某些子节点是否为空,为了避免空指针异常
         for (Element eles : eleList) {

             if(eles.element("MedlineCitation").element("Article").elements("Abstract").size()>0 )
             { 

                //System.out.println(eles.element("PubmedData").getName());

                String temp1=eles.element("MedlineCitation").element("Article").element("ArticleTitle").getText();
                String temp2=eles.element("MedlineCitation").element("Article").element("Abstract").element("AbstractText").getText();

                /*if(!temp1.equals("") && !temp2.equals("") && temp1!=null && temp2!=null )
                {*/
                    //将文档的标题和摘要的内容写入到字节数组中
                    ByteArrayOutputStream bio=new ByteArrayOutputStream();
                    bio.write(temp1.getBytes());//将string转化为字节数组通过getBytes()
                    //bio.write(65);
                    bio.write(temp2.getBytes());
                    //bio.write(93);

                    //将字节数组中的内容写入到文件当中,用writeTo的方法,true代表可以追加不会覆盖原有的内容
                    FileOutputStream fio=new FileOutputStream("E:\\zhangsan\\experimentdata.txt",true);
                    bio.writeTo(fio);

                    fio.close();


             }

         }
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }  

}

}

数据集中标签的格式如下,多层子节点
数据集中标签的格式如下,多层子节点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值