XML的生成和解析

1.什么是XML

XML就是可扩展的标记语言。HTML超文本标记语言

标记语言就是通过一个一个的标记来组织数据的一种语法格式

与HTML超文本标记语言相比XML可扩展标记语言的标记是自己定义的

 XML中自定义标记格式:

1.<标记名称>具体数据</标记名称>

2.<标记名称 属性1="属性值" 属性2="属性值".....>具体数据</标记名称>

   <标记名称>---开始标记

   <标记名称 属性1="属性值" 属性2="属性值".....>---开始标记

   </标记名称>---结束标记

2.XML的作用

  1.存储数据的一种语法格式

  2.数据包的交换格式

3.如何编写XML文件

将一个java对象组织成一个xml格式的数据

例如:

XML类型的数据/文件【student.xml】

package com.wangxing.test1;

public class Student {
	private int stuid;
	private String stuname;
	private int stuage;
	private String stuaddress;
	public int getStuid() {
		return stuid;
	}
	public void setStuid(int stuid) {
		this.stuid = stuid;
	}
	public String getStuname() {
		return stuname;
	}
	public void setStuname(String stuname) {
		this.stuname = stuname;
	}
	public int getStuage() {
		return stuage;
	}
	public void setStuage(int stuage) {
		this.stuage = stuage;
	}
	public String getStuaddress() {
		return stuaddress;
	}
	public void setStuaddress(String stuaddress) {
		this.stuaddress = stuaddress;
	}

}
package com.wangxing.test1;

public class TestMain {

	public static void main(String[] args) {
		Student student=new Student();
		student.setStuid(1001);
		student.setStuname("zhangsan");
		student.setStuage(23);
		student.setStuaddress("西安");
	}

}
<?xml version="1.0"  encoding="utf-8"?>---xml类型数据文件/文件标识【必不可少】
<students>---xml的根元素【必不可少】
  <student stuid="1001">---xml的子元素,stuid="1001"---当前子元素的一个属性
     <stuname>zhangsan</stuname>---xml的子子元素,zhangsan---具体数值
     <stuage>23</stuage>---xml的子子元素,23---具体数值
     <stuaddress>西安</stuaddress>---xml的子子元素,西安---具体数值
  </student>
</students>

注意:

1.<?xml version="1.0"  encoding="utf-8"?不能少

2.根元素只有一个,必不可少

3.具体数据值都是由子元素/子子元素保存的

4.文件后缀名必须使用".xml'

 将一个保存有java对象的集合/数组组织成一个xml格式的数据具体的做法

例如:

package com.wangxing.test1;

import java.util.ArrayList;
import java.util.List;

public class TestMain {

	public static void main(String[] args) {
		Student student1=new Student();
		student1.setStuid(1001);
		student1.setStuname("zhangsan");
		student1.setStuage(23);
		student1.setStuaddress("西安");
		Student student2=new Student();
		student2.setStuid(1002);
		student2.setStuname("lisi");
		student2.setStuage(20);
		student2.setStuaddress("上海");
		Student student3=new Student();
		student3.setStuid(1003);
		student3.setStuname("wangwu");
		student3.setStuage(25);
		student3.setStuaddress("深圳");
		List<Student> studentlist=new ArrayList<Student>();
		studentlist.add(student1);
		studentlist.add(student2);
		studentlist.add(student3);
	}
}

将上面的 studentlist 组织成xml数据/文件【student.xml】

<?xml version="1.0"  encoding="utf-8"?>
<studentlist>
	<student stuid="1001">
		<stuname>zhangsan</stuname>
		<stuage>23</stuage>
		<stuaddress>西安</stuaddress>
	</student>
	<student stuid="1002">
		<stuname>lisi</stuname>
		<stuage>20</stuage>
		<stuaddress>上海</stuaddress>
	</student>
	<student stuid="1003">
		<stuname>wangwu</stuname>
		<stuage>25</stuage>
		<stuaddress>深圳</stuaddress>
	</student>
</studentlist>

注意:

         1.标记都是自己定义,没有固定的具体标记

         2.子元素、子子元素是可以有多个的。

4.XML文件的生成

1.Dom生成---java默认的dom生成方式【jdk提供的java类】

例如:

package com.wangxing.test1;

public class Student {
	private int stuid;
	private String stuname;
	private int stuage;
	private String stuaddress;
	public int getStuid() {
		return stuid;
	}
	public void setStuid(int stuid) {
		this.stuid = stuid;
	}
	public String getStuname() {
		return stuname;
	}
	public void setStuname(String stuname) {
		this.stuname = stuname;
	}
	public int getStuage() {
		return stuage;
	}
	public void setStuage(int stuage) {
		this.stuage = stuage;
	}
	public String getStuaddress() {
		return stuaddress;
	}
	public void setStuaddress(String stuaddress) {
		this.stuaddress = stuaddress;
	}

}
package com.wangxing.test1;

import java.io.File;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

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

public class XMLHelper {
	/*
	 * java默认的dom生成方式【jdk提供的java类】
	 */
	public static void createXML(List<Student> studentlist) throws Exception{
		//得到DOM解析器工厂
		DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
		//创建DocumentBuilder对象
		DocumentBuilder documentBuilder=factory.newDocumentBuilder();
		//创建Document对象
		Document document=documentBuilder.newDocument();
		//设置文档对象的文件头
		document.setXmlStandalone(true);
		//创建根元素
		Element rootElenment=document.createElement("studentlist");
		//遍历集合
		for(Student student:studentlist){
			//创建子元素
			Element studentElement=document.createElement("student");
		    //为子元素设置属性
			studentElement.setAttribute("stuid", String.valueOf(student.getStuid()));
			//创建子子元素
			Element stunameElement=document.createElement("stuname");
			//为子子元素设置具体数据值
			stunameElement.setTextContent(student.getStuname());
			//创建子子元素
			Element stuageElement=document.createElement("stunage");
			//为子子元素设置具体数据值
			stuageElement.setTextContent(String.valueOf(student.getStuage()));
			//创建子子元素
			Element stuaddressElement=document.createElement("stuaddress");
			//为子子元素设置具体数据值
			stuaddressElement.setTextContent(student.getStuaddress());
			//将子子元素添加到子元素中
			studentElement.appendChild(stunameElement);
			studentElement.appendChild(stuageElement);
			studentElement.appendChild(stuaddressElement);
			rootElenment.appendChild(studentElement);
		}
		//将根元素添加Document对象中
		document.appendChild(rootElenment);
		//将document对象写出到文件中
		File file=new File("student.xml");
		//创建TransformerFactory对象
		TransformerFactory tfo=TransformerFactory.newInstance();
		//创建Transformer对象
		Transformer tf=tfo.newTransformer();
		// 输出内容是否使用换行
		tf.setOutputProperty(OutputKeys.INDENT, "yes");
		//创建xml文件并写入内容
		tf.transform(new DOMSource(document), new StreamResult(file));
	}
}
package com.wangxing.test1;

import java.util.ArrayList;
import java.util.List;

public class TestMain {

	public static void main(String[] args) throws Exception {
		Student student1=new Student();
		student1.setStuid(1001);
		student1.setStuname("zhangsan");
		student1.setStuage(23);
		student1.setStuaddress("西安");
		Student student2=new Student();
		student2.setStuid(1002);
		student2.setStuname("lisi");
		student2.setStuage(20);
		student2.setStuaddress("上海");
		Student student3=new Student();
		student3.setStuid(1003);
		student3.setStuname("wangwu");
		student3.setStuage(25);
		student3.setStuaddress("深圳");
		List<Student> studentlist=new ArrayList<Student>();
		studentlist.add(student1);
		studentlist.add(student2);
		studentlist.add(student3);
		XMLHelper.createXML(studentlist);
	}
}

  2.使用第三方开发包

       1.dom4j

例如:

package com.wangxing.test1;

public class Student {
	private int stuid;
	private String stuname;
	private int stuage;
	private String stuaddress;
	public int getStuid() {
		return stuid;
	}
	public void setStuid(int stuid) {
		this.stuid = stuid;
	}
	public String getStuname() {
		return stuname;
	}
	public void setStuname(String stuname) {
		this.stuname = stuname;
	}
	public int getStuage() {
		return stuage;
	}
	public void setStuage(int stuage) {
		this.stuage = stuage;
	}
	public String getStuaddress() {
		return stuaddress;
	}
	public void setStuaddress(String stuaddress) {
		this.stuaddress = stuaddress;
	}

}
package com.wangxing.test1;

import java.io.File;
import java.io.FileOutputStream;
import java.util.List;


import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

public class XMLHelper {
	/*
	 * dom4j
	 */
	/*
	public static void createXML2(List<Student> studentlist)throws Exception{
		//创建Document对象
		Document document=DocumentHelper.createDocument();
		//创建根元素
		Element rootElement=document.addElement("studentlist");
		for(Student student:studentlist){
			//创建子元素
			Element studentElement=rootElement.addElement("student");
			//得到子元素的属性设置
			studentElement.addAttribute("stuid",String.valueOf(student.getStuid()));
			//创建子子元素
			Element stuageElement= studentElement.addElement("stuage");
			//为子子元素设置具体数据值
			stuageElement.setText(String.valueOf(student.getStuage()));
			//创建子子元素
			Element stuaddressElement= studentElement.addElement("stuaddress");
			//为子子元素设置具体数据值
			stuaddressElement.setText(student.getStuaddress());
		}
		//设置XML生成格式
		OutputFormat format=OutputFormat.createPrettyPrint();
		//设置编码格式
		format.setEncoding("UTF-8");
		//创建XML输出流
		XMLWriter writer=new XMLWriter(new FileOutputStream(new File("student2.xml")),format);
		//设置是否转义,默认使用转义字符
		writer.setEscapeText(false);
		//写出Document对象
		writer.write(document);
		//关闭流
		writer.close();
	}
	
}
package com.wangxing.test1;

import java.util.ArrayList;
import java.util.List;

public class TestMain {

	public static void main(String[] args) throws Exception {
		Student student1=new Student();
		student1.setStuid(1001);
		student1.setStuname("zhangsan");
		student1.setStuage(23);
		student1.setStuaddress("西安");
		Student student2=new Student();
		student2.setStuid(1002);
		student2.setStuname("lisi");
		student2.setStuage(20);
		student2.setStuaddress("上海");
		Student student3=new Student();
		student3.setStuid(1003);
		student3.setStuname("wangwu");
		student3.setStuage(25);
		student3.setStuaddress("深圳");
		List<Student> studentlist=new ArrayList<Student>();
		studentlist.add(student1);
		studentlist.add(student2);
		studentlist.add(student3);
		//XMLHelper.createXML(studentlist);
		//XMLHelper.createXML2(studentlist);
	}
}

       2.jdom

例如:

package com.wangxing.test1;

public class Student {
	private int stuid;
	private String stuname;
	private int stuage;
	private String stuaddress;
	public int getStuid() {
		return stuid;
	}
	public void setStuid(int stuid) {
		this.stuid = stuid;
	}
	public String getStuname() {
		return stuname;
	}
	public void setStuname(String stuname) {
		this.stuname = stuname;
	}
	public int getStuage() {
		return stuage;
	}
	public void setStuage(int stuage) {
		this.stuage = stuage;
	}
	public String getStuaddress() {
		return stuaddress;
	}
	public void setStuaddress(String stuaddress) {
		this.stuaddress = stuaddress;
	}

}
package com.wangxing.test1;

import java.io.File;
import java.io.FileOutputStream;
import java.util.List;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

public class XMLHelper {
	/*
	 * jdom
	 */

	public static void creatXML3(List<Student> studentlist)throws Exception{
		//创建根元素
		Element rootElement=new Element("studentlist");
		for(Student student:studentlist){
			//创建子元素
			Element studentElement=new Element("student");
			 //为子元素设置属性
			studentElement.setAttribute("stuid", String.valueOf(student.getStuid()));
			//创建子子元素
			Element stunameElement=new Element("stuname");
			//为子子元素设置具体数据值
			stunameElement.setText(student.getStuname());
			//创建子子元素
			Element stuageElement=new Element("stuage");
			//为子子元素设置具体数据值
			stuageElement.setText(String.valueOf(student.getStuage()));
			//创建子子元素
			Element stuaddressElement=new Element("stuaddress");
			//为子子元素设置具体数据值
			stuaddressElement.setText(student.getStuaddress());
			//将子子元素添加到子元素中
			studentElement.addContent(stunameElement);
			studentElement.addContent(stuageElement);
			studentElement.addContent(stuaddressElement);
			//将子元素添加到根元素中
			rootElement.addContent(studentElement);
		}
		//创建Document对象并将根元素添加到Docuement对象中
		Document document=new Document(rootElement);
		//输出Document对象
	   Format format=Format.getCompactFormat();
		 // 设置换行Tab或空格
	   format.setIndent("  ");
       format.setEncoding("UTF-8");
		//创建XMLOutputter的对象
		XMLOutputter outputer=new XMLOutputter(format);
		//写出Document对象
		outputer.output(document,new FileOutputStream(new File("student3.xml")));
	}
}
package com.wangxing.test1;

import java.util.ArrayList;
import java.util.List;

public class TestMain {

	public static void main(String[] args) throws Exception {
		Student student1=new Student();
		student1.setStuid(1001);
		student1.setStuname("zhangsan");
		student1.setStuage(23);
		student1.setStuaddress("西安");
		Student student2=new Student();
		student2.setStuid(1002);
		student2.setStuname("lisi");
		student2.setStuage(20);
		student2.setStuaddress("上海");
		Student student3=new Student();
		student3.setStuid(1003);
		student3.setStuname("wangwu");
		student3.setStuage(25);
		student3.setStuaddress("深圳");
		List<Student> studentlist=new ArrayList<Student>();
		studentlist.add(student1);
		studentlist.add(student2);
		studentlist.add(student3);
		XMLHelper.creatXML3(studentlist);
	}
}

2.通过拼接字符串【不推荐,易出错】

package com.wangxing.test1;

public class Student {
	private int stuid;
	private String stuname;
	private int stuage;
	private String stuaddress;
	public int getStuid() {
		return stuid;
	}
	public void setStuid(int stuid) {
		this.stuid = stuid;
	}
	public String getStuname() {
		return stuname;
	}
	public void setStuname(String stuname) {
		this.stuname = stuname;
	}
	public int getStuage() {
		return stuage;
	}
	public void setStuage(int stuage) {
		this.stuage = stuage;
	}
	public String getStuaddress() {
		return stuaddress;
	}
	public void setStuaddress(String stuaddress) {
		this.stuaddress = stuaddress;
	}

}
package com.wangxing.test1;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.List;


public class XMLHelper {
	*/
	/*
	 * 字符串拼接
	 * 
	 */
	public static void createXML4(List<Student> studentlist) throws Exception {
		// 定义一个保存拼接好的字符串变量
		String xmlcontent = null;
		// 为了拼接字符串更加方便我们使用stringbuilder类拼接字符串
		StringBuilder stringBuilder = new StringBuilder();
		stringBuilder.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
		stringBuilder.append("\r\n");
		stringBuilder.append("<studentlist>");
		stringBuilder.append("\r\n");
		// 遍历需要被生成成xml文件的集合
		for (Student student : studentlist) {
			stringBuilder.append("\t<student  stuid=\"" + student.getStuid() + "\">");
			stringBuilder.append("\r\n");
			stringBuilder.append("\t\t<stuname>" + student.getStuname() + "</stuname>");
			stringBuilder.append("\r\n");
			stringBuilder.append("\t\t<stuage>" + student.getStuage()+ "</stuage>");
			stringBuilder.append("\r\n");
			stringBuilder.append("\t\t<stuaddress>" + student.getStuaddress() + "</stuaddress>");
			stringBuilder.append("\r\n");
			stringBuilder.append("\t</student>");
			stringBuilder.append("\r\n");
		}
		stringBuilder.append("<studentlist>");
		xmlcontent = stringBuilder.toString();
		System.out.println(xmlcontent);
		// 创建输出流对象,将创建好的xml,保存到文件中
		File file = new File("student4.xml");
		BufferedWriter out = new BufferedWriter(new FileWriter(file));
		out.write(xmlcontent);
		out.close();
	}

}
package com.wangxing.test1;

import java.util.ArrayList;
import java.util.List;

public class TestMain {

	public static void main(String[] args) throws Exception {
		Student student1=new Student();
		student1.setStuid(1001);
		student1.setStuname("zhangsan");
		student1.setStuage(23);
		student1.setStuaddress("西安");
		Student student2=new Student();
		student2.setStuid(1002);
		student2.setStuname("lisi");
		student2.setStuage(20);
		student2.setStuaddress("上海");
		Student student3=new Student();
		student3.setStuid(1003);
		student3.setStuname("wangwu");
		student3.setStuage(25);
		student3.setStuaddress("深圳");
		List<Student> studentlist=new ArrayList<Student>();
		studentlist.add(student1);
		studentlist.add(student2);
		studentlist.add(student3);
		XMLHelper.createXML4(studentlist);
	}
}

5.XML文件解析

1.DOM(Document Object Model)解析

    1.Java默认的Dom解析xml

例如:

package com.wangxing.test2;


public class XMLHelper {
	public static List<Student>getStudentList1(String filename)throws Exception{
		List<Student> stulist=new ArrayList<Student>();
		//得到解析工厂
		DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
		//得到DocumentBuilder解析器堆栈
		DocumentBuilder documentBuilder=builderFactory.newDocumentBuilder();
		//创建Document对象
		Document document=documentBuilder.parse(new File(filename));
		//得到所有子元素集合
		NodeList studentNodeList=document.getElementsByTagName("student");
		for(int i=0;i<studentNodeList.getLength();i++){
			Student student=new Student();
			//得到子元素
			Node studentELement=studentNodeList.item(i);
			//得到子元素的属性值
			int stuid=Integer.parseInt(studentELement.getAttributes().item(0).getNodeValue());
			student.setStuid(stuid);
			//得到子子元素集合
			NodeList grandsonELement=studentELement.getChildNodes();
			for(int j=0;j<grandsonELement.getLength();j++){
				//得到子子元素
				Node stunameElement=grandsonELement.item(j);
				//得到子子元素设置的具体数据值
				String info=stunameElement.getTextContent();
				if(stunameElement.getNodeName().equals("stuname")){
					student.setStuname(info);
				}
				if(stunameElement.getNodeName().equals("stunage")){
					student.setStuname(info);
				}
				if(stunameElement.getNodeName().equals("stunaddress")){
					student.setStuname(info);
				}
			}
			stulist.add(student);
		}
		return stulist;	
	}
	
	
}
package com.wangxing.test2;

import java.util.List;

public class TestMain {

	public static void main(String[] args) throws Exception {
		List<Student>stulist=XMLHelper.getStudentList1("student3.xml");
		System.out.println(stulist.size());
		for(Student student:stulist){
			System.out.println(student.getStuname());
		}
	}
}

    2.dom4j

例如:

package com.wangxing.test2;

public class XMLHelper {
	/*
	 * dom4j
	 */
	public static List<Student>getStudntList2(String filename)throws Exception{
		List<Student> stulist=new ArrayList<Student>();
		SAXReader saxReader=new SAXReader();
		//创建Document对象
		Document document=saxReader.read(new File(filename));
		//得到根元素
		Element rootELement=document.getRootElement();
		//得到子元素
		List<Element> studentlistElement=rootELement.elements("student");
		for(Element studentELement:studentlistElement){
			Student student=new Student();
			//得到子元素的属性
			int stuid=Integer.parseInt(studentELement.attributeValue("stuid"));
			//得到子子元素
			Element stunameELement=studentELement.element("stuname");
			//得到子子元素设置的具体数据值
			String stuname=stunameELement.getText();
			//得到子子元素
			Element stuageElement=studentELement.element("stuage");
			//得到子子元素设置的具体数据值
			int stuage=Integer.parseInt(stuageElement.getText());
			//得到子子元素
			Element stuaddressElement=studentELement.element("stuaddress");
			//得到子子元素设置的具体数据值
			String stuaddress=stuaddressElement.getText();
			student.setStuid(stuid);
			student.setStuname(stuname);
			student.setStuage(stuage);
			student.setStuaddress(stuaddress);
			stulist.add(student);
		}
		return stulist;
	}
	
}
package com.wangxing.test2;

import java.util.List;

public class TestMain {

	public static void main(String[] args) throws Exception {
		List<Student>stulist=XMLHelper.getStudntList2("student3.xml");
		System.out.println(stulist.size());
		for(Student student:stulist){
			System.out.println(student.getStuname());
		}
	}
}

   3.jdom

例如:

package com.wangxing.test2;

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

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

public class XMLHelper {
	/*
	 * jdom
	 * 
	 */
	public static List<Student>getStudntList2(String filename)throws Exception{
		List<Student> stulist=new ArrayList<Student>();
	    SAXBuilder saxBuilder=new SAXBuilder();
		//创建Document对象
		Document document=saxBuilder.build(new File(filename));
		//得到根元素
		Element rootELement=document.getRootElement();
		//得到子元素
		List<Element> studentlistElement=rootELement.getChildren("student");
		for(Element studentELement:studentlistElement){
			Student student=new Student();
			//得到子元素的属性
			int stuid=Integer.parseInt(studentELement.getAttributeValue("stuid"));
			//得到子子元素
			Element stunameELement=studentELement.getChild("stuname");
			//得到子子元素设置的具体数据值
			String stuname=stunameELement.getText();
			//得到子子元素
			Element stuageElement=studentELement.getChild("stuage");
			//得到子子元素设置的具体数据值
			int stuage=Integer.parseInt(stuageElement.getText());
			//得到子子元素
			Element stuaddressElement=studentELement.getChild("stuaddress");
			//得到子子元素设置的具体数据值
			String stuaddress=stuaddressElement.getText();
			student.setStuid(stuid);
			student.setStuname(stuname);
			student.setStuage(stuage);
			student.setStuaddress(stuaddress);
			stulist.add(student);
		}
		return stulist;
	}
	
}
package com.wangxing.test2;

import java.util.List;

public class TestMain {

	public static void main(String[] args) throws Exception {
		List<Student>stulist=XMLHelper.getStudntList2("student3.xml");
		System.out.println(stulist.size());
		for(Student student:stulist){
			System.out.println(student.getStuname());
		}
	}
}

4.DOM(Document Object Model) 解析的原理 

DOM(Document Object Model) 解析的原理就是需要被解析的xml文件,读取成一个文档树【Document对象】,依据提供的开发类库和方法从文档中得到根元素,再从根元素中得到子元素,从子元素中得到子子元素,再到具体的数据值

优点:结构清晰明了

缺点:通常需要加载这个XML文档来构造层次结构,消耗资源大

2.SAX(Simple API for XML)解析

   DefaultHandler 

例如:

package com.wangxing.test2;

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

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

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

public class XMLHelper {
	public static List<Student>getStudentList4(String filename)throws Exception{
		//得到SAX解析器工厂
		SAXParserFactory saxfactory=SAXParserFactory.newInstance();
		//得到解析器对象
		SAXParser saxParser=saxfactory.newSAXParser();
		MyDefaultHandler  myDefaultHandler=new MyDefaultHandler();
		System.out.println(myDefaultHandler);
		saxParser.parse(new File(filename), myDefaultHandler);
		return myDefaultHandler.getStudentList();
	}
}
package com.wangxing.test2;

import java.util.ArrayList;
import java.util.List;

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

public class MyDefaultHandler extends DefaultHandler{
	private List<Student>studentlist=null;
	private  Student  student=null;
	private  String  elementName="";
	/**
	 * 得到解析后的数据集合
	 */
	public List<Student>getStudentList(){
		return studentlist;
	}
	/*
	 * 文档开始
	 * 
	 */
	public void startDocument()throws SAXException{
		studentlist=new ArrayList<Student>();
	}
	/*
	 * 文档结束
	 */
	public void endDocument() throws SAXException{
		super.endDocument();
	}
	/*
	 * 元素开始
	 * 
	 */
	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
		if(qName.equals("student")){
			student=new Student();
			int stuid=Integer.parseInt(attributes.getValue("stuid"));
			student.setStuid(stuid);
		}
		if(qName.equals("stuname")){
			elementName=qName;
		}
		if(qName.equals("stuage")){
			elementName=qName;
		}
		if(qName.equals("stuaddress")){
			elementName=qName;
		}
	}
	/*
	 * 元素结束
	 * 
	 */
	public void endElement(String uri, String localName, String qName) throws SAXException {
		elementName="";
		if(qName.equals("student")){
			studentlist.add(student);
			student=null;
		}
	}
	/*
	 * 得到数据值
	 */
	public void characters(char[] ch, int start, int length) throws SAXException {
		String  info=new String(ch,start,length);
		if(elementName.equals("stuname")){
			student.setStuname(info);
		}
		if(elementName.equals("stunage")){
			student.setStuage(Integer.parseInt(info));
		}
		if(elementName.equals("stunaddress")){
			student.setStuaddress(info);
		}
	}
}
package com.wangxing.test2;

import java.util.List;

public class TestMain {

	public static void main(String[] args) throws Exception {
		List<Student>stulist=XMLHelper.getStudentList4("student3.xml");
		System.out.println(stulist.size());
		for(Student student:stulist){
			System.out.println(student.getStuname());
		}
	}
}

 1.SAX(Simple API for XML)解析xml文件原理 

 SAX(Simple API for XML)解析xml文件原理基于时间模型。在解析XML文档时可以触发一系列事件,当发现给定的标签的时候,它可以激活个回调方法,告诉该方法指定的标签已经找到,如果和这个指定的标记中有我们需要的数据值就解析,没有就不用处理。读取一个元素,判断这个元素属于xnm文件的哪一个元素【文档开始/文档结束/标记开始/标记结束/文本元素】,不同的元素出发不同的方法来执行解析数据,如果当前元素中没有数据值就跳过读取下一个元素

优点:

1.只读取数据时检查数据,不需要保存在内存中

2.可以再某个条件得到满足是停止解析,不用解析整个文档

3.效率和性能比较高,能解析大于系统内存的文档

缺点:没有清晰的解析结构

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值