yu0312chao的gravatar头像
yu0312chao2014-10-02 12:02:14

Java XML解析的四种方法总结

ML项目工程展示图如下图:

student.xml 文件展示:

 <?xml version="1.0" encoding="utf-8" ?>
<person>
   <student id='1'>
        <name>余超</name>
        <sex>男</sex>
        <desc>一个执着而又天真的孩子</desc>        
   </student>
     <student id='2'>
        <name>马靖</name>
        <sex>女</sex>
        <desc>一个特别难追求的女孩子</desc>        
   </student>
</person>

Student实体类的展示:

package net.nyist.xmlparse.domain;

import java.io.Serializable;

/**
 * @author yuchao
 * 
 * @school 南阳理工软件学院移动设备应用与开发移动四班
 * 
 * @email [email protected]
 * 
 * @time 2014年9月30日 下午10:52:47
 */

@SuppressWarnings("serial")
public class Student implements Serializable {

	private int id;
	private String name;
	private String sex;
	private String desc;

	public Student() {
	}

	public Student(int id, String name, String sex, String desc) {
		this.id = id;
		this.name = name;
		this.sex = sex;
		this.desc = desc;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public String getDesc() {
		return desc;
	}

	public void setDesc(String desc) {
		this.desc = desc;
	}

	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", sex=" + sex
				+ ", desc=" + desc + "]";
	}
}

方法一:通过DOM来解析XML文件

package net.nyist.xmlparse.parse.dom
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import net.nyist.xmlparse.domain.Student;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
 * @author yuchao
 * 
 * @school 南阳理工软件学院移动设备应用与开发移动四班
 * 
 * @email [email protected]
 * 
 * @time 2014年9月30日 下午11:12:57
 */

public class DocumentBuilderFactoryDemo {

    public static void main(String[] args) {
    
        long start = System.currentTimeMillis();
        /** 首先得到:得到 DOM 解析器的工厂实例 */
      
            Student student = null;
            for (int i = 0; i < nodeList.getLength(); i++) {

                Node node = nodeList.item(i);
                int id = Integer.parseInt(node.getAttributes()
                        .getNamedItem("id").getNodeValue());
                String nameValue = "";
                String sexValue = "";
                String descValue = "";

        } catch (Exception e) {
            e.printStackTrace();
        }
        for (int i = 0; students != null && students.size() > 0
                && i < students.size(); i++) {
            System.out.println(students.get(i));
        }
     System.out.println("共用时:"+(System.currentTimeMillis()-start));
    }
}

运行结果:

方法二:用SAX解析XML文件

package net.nyist.xmlparse.parse.sax;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import net.nyist.xmlparse.domain.Student;

import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

/**
 * @author yuchao
 * 
 * @school 南阳理工软件学院移动设备应用与开发移动四班
 * 
 * @email [email protected]
 * 
 * @time 2014年10月1日 下午6:38:52
 * 
 * @deprecated 本类是用来对于XML文本的解析类
 */

public class PersonHandle extends DefaultHandler {

    private Student student;
    private List<Student> students;
    /**对于这个属性的使用主要作用是为了用来存放标签的名称,由此而获得这个标签下的文本内容的值*/
    private String tagName;

    
    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        
        if ("student".equals(qName)) {
            students.add(student);
        }
        /**将其值变为null的主要目的是为了防止再次遍历的时候保存了结尾标签,这样会有空值的存在*/
        tagName = null;
    }

    public void characters(char ch[], int start, int length)
            throws SAXException {

        if (!"".equals(tagName) && tagName != null) {

            if ("name".equals(tagName)) {

                student.setName(new String(ch, start, length));

            } else if ("sex".equals(tagName)) {

                student.setSex(new String(ch, start, length));

            } else if ("desc".equals(tagName)) {

                student.setDesc(new String(ch, start, length));
            }
        }
    }
}
package net.nyist.xmlparse.parse.sax;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import net.nyist.xmlparse.domain.Student;

import org.xml.sax.SAXException;

/**
 * @author yuchao
 * 
 * @school 南阳理工软件学院移动设备应用与开发移动四班
 * 
 * @email [email protected]
 * 
 * @time 2014年10月1日 下午6:30:51
 */

public class SaxFacroryParseDemo {

	public static void main(String[] args) {
         
		long start =System.currentTimeMillis();
		/** 创建SAX解析器工厂对象*/
		SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
		try {
		    
			System.out.println("共用时:"+(System.currentTimeMillis()-start));
		} catch (ParserConfigurationException | SAXException | IOException e) {
			e.printStackTrace();
		}
	}
}

运行结果:

 方法三:jdom解析XML文件:需要引入jdom.jar包

package net.nyist.xmlparse.parse.jdom;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import net.nyist.xmlparse.domain.Student;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

/**
 * @author yuchao
 * 
 * @school 南阳理工软件学院移动设备应用与开发移动四班
 * 
 * @email [email protected]
 * 
 * @time 2014年10月1日 下午9:08:47
 */

public class SAXBuilderDemo {

    @SuppressWarnings("unchecked")
    public static void main(String[] args) {

        long start = System.currentTimeMillis();
        SAXBuilder saxBuilder = new SAXBuilder();
        /**加载资源文件*/
        InputStream in = SAXBuilderDemo.class.getClassLoader()
                .getResourceAsStream("student.xml");
        try {
            Document document = saxBuilder.build(in);
       
        } catch (JDOMException | IOException e) {
            e.printStackTrace();
        }
    }
}

运行结果:

 方法四:通过dom4j解析XML引入两个包dom4j.jar、jaxen.jar

package net.nyist.xmlparse.parse.dom4j;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import net.nyist.xmlparse.domain.Student;

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

/**
 * @author yuchao
 *
 * @school 南阳理工软件学院移动设备应用与开发移动四班
 *
 * @email [email protected]
 *
 * @time  2014年10月1日 下午9:45:12
 */

public class SAXReaderDemo {
  
    @SuppressWarnings("unchecked")
    public static void main(String[] args) {
        
        long start = System.currentTimeMillis();
     
        try {
            Document document = saxReader.read(in);
          
            for (int i = 0; students != null && i < students.size(); i++)
                System.out.println(students.get(i));
            System.out.println("共用时:"
                    + (System.currentTimeMillis() - start));
        } catch (DocumentException e) {
            e.printStackTrace();
        }
         
    }
}

运行结果:


最代码官方编辑于2014-10-2 14:42:25


打赏

文件名:xmlparse.zip,文件大小:631.604K下载
最代码最近下载分享源代码列表最近下载
ycb159856 LV122017年4月11日
月亮月亮月亮
scpcyzxb LV162017年3月5日
太阳
v512345 LV102016年2月14日
月亮月亮星星星星
日久生情 LV192015年6月12日
太阳星星星星星星
jing427 LV182015年3月9日
太阳星星星星
zyb507 LV132015年1月22日
月亮月亮月亮星星
1037704496 LV12014年11月14日
星星
softcore LV102014年10月14日
月亮月亮星星星星
lwptest LV12014年10月12日
星星
最代码最近浏览分享源代码列表最近浏览
1234567891011 LV52020年7月3日
月亮星星
王二麻子滴滴2020年6月14日
暂无贡献等级
和诗夜2020年6月13日
暂无贡献等级
下载狂魔2020年1月16日
暂无贡献等级
AKALilgirl2019年12月8日
暂无贡献等级
0312wangchen LV252019年10月31日
太阳月亮月亮星星
xp9522 LV92019年8月21日
月亮月亮星星
is_gary LV142019年8月18日
月亮月亮月亮星星星星
zhysayhi LV32019年7月4日
星星星星星星
hbs2019 LV92019年4月23日
月亮月亮星星
顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友