(1)DOM解析法

1.在src下创建class.xml文件


  
     张三
     
     20
  
  
     李四
     
     19
  
  
     王五
     
     21
  

2.创建java程序Demo.java直接解析class.xml文件

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Demo {
   public static void main(String[] args) {
	   //得到当前类的加载器,负责加载类 加载到虚拟机 得到资源
	   String path=Demo.class.getClassLoader().getResource("class.xml").getPath();
	   //创建Demo解释器工厂类 
	   DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
       try {
		//利用工厂创建一个解释器
    	DocumentBuilder db=dbf.newDocumentBuilder();
		//通过当前的解释器的解析得到当前的XML文件和XML文档模型
    	Document document=db.parse(path);
		//通过得到的文档模型得到根节点
    	Element rootElement=document.getDocumentElement();
		//通过得到的根节点得到根节点属性的集合
    	NamedNodeMap rootattr=rootElement.getAttributes();
//		System.out.println(rootElement.getTagName());
		//遍历根节点属性集合
		if(rootattr!=null&&rootattr.getLength()>0){
			for(int i=0;i0){
				for(int k=0;k 
  

java解析XML文件-DOM解析法与SAX解析法_第1张图片

3.引用对象创建student.java将以下studen.xml文件中需要解析的属性和节点进行封装

班级>
   <学生 编号="A001">
     <姓名>张三
     <年龄>23
     <电子邮箱>[email protected]
     <电子邮箱>[email protected]
     <身高>179.5
     <电话>686868
     <单位>
        xxx公司 
        <地址>上海
        <邮编>100002
     
  
  <学生 编号="A0003">
     <姓名>李四
     <年龄>24
     <电子邮箱>[email protected]
     <身高>168.0
     <电话>135013562554
     <单位>
        <地址>北京
     
  

封装属性

public class Student {
	 private String stuid;
	 private int age;
	 private double height;
	 private String name;
	 private String tel;
	 private String email1;
	 private String email2;
	 private String unit;
	 private String addressu;
	 private String emailu;
	 private String company;
	 
	public String getCompany() {
		return company;
	}
	public void setCompany(String company) {
		this.company = company;
	}
	public String getStuid() {
		return stuid;
	}
	public void setStuid(String stuid) {
		this.stuid = stuid;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public double getHeight() {
		return height;
	}
	public void setHeight(double height) {
		this.height = height;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getTel() {
		return tel;
	}
	public void setTel(String tel) {
		this.tel = tel;
	}
	public String getEmail1() {
		return email1;
	}
	public void setEmail1(String email1) {
		this.email1 = email1;
	}
	public String getEmail2() {
		return email2;
	}
	public void setEmail2(String email2) {
		this.email2 = email2;
	}
	public String getUnit() {
		return unit;
	}
	public void setUnit(String unit) {
		this.unit = unit;
	}
	public String getAddressu() {
		return addressu;
	}
	public void setAddressu(String addressu) {
		this.addressu = addressu;
	}
	public String getEmailu() {
		return emailu;
	}
	public void setEmailu(String emailu) {
		this.emailu = emailu;
	}
}

以对象的形式进行DOM解析student.xml文件

import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Demostu {
	public static void main(String[] args) {
		String path=Demo.class.getClassLoader().getResource("student.xml").getPath();
		List li=parseXMLToObject(path);
		for(int i=0;i parseXMLToObject(String path){
		   List list=new ArrayList();
		   DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
		   try {
			DocumentBuilder db=dbf.newDocumentBuilder();
			Document document=db.parse(path);
			Element rootElement=document.getDocumentElement();
			NodeList studentList=rootElement.getChildNodes();
			Student s;
			for(int i=0;i0){
					for(int j=0;j0){
					for(int h=0;h 
  

java解析XML文件-DOM解析法与SAX解析法_第2张图片

(2)SAX解析法

1.在src下创建book.xml文件


  Java实例一百例
  
    基础知识篇
    base.htm
  
  
    SWING篇
    swing.htm
  
  
    EJB篇
    ejb.htm
  
  
    DOM篇
    xmldom.htm
  

2.创建MyHander类继承DefaultHandler类

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

public class MyHander extends DefaultHandler{

	@Override
	public void startDocument() throws SAXException {
		System.out.println("开始文档解析!");
	}

	@Override
	public void endDocument() throws SAXException {
		System.out.println("文档解析结束!");
	}
	
	String tagName;
	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		tagName=qName;
		if(tagName.equals("page")){
			System.out.println("编号:"+attributes.getValue("id"));
		}
	}

	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		tagName="";
	}

	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		if(tagName.equals("title")){
			String content=new String(ch).substring(start, start+length);
			System.out.println("标题:"+content);
		}
		if(tagName.equals("file")){
			String content=new String(ch).substring(start, start+length);
			System.out.println("文件:"+content);
		}
	}
}

3.创建Test类进行文档解析

import java.io.File;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;


public class Test {
	public static void main(String[] args) {
		String path=Test.class.getClassLoader().getResource("book.xml").getPath();
		SAXParserFactory factory=SAXParserFactory.newInstance();
		try {
			SAXParser sp=factory.newSAXParser();
			sp.parse(new File(path), new MyHander());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

java解析XML文件-DOM解析法与SAX解析法_第3张图片