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.效率和性能比较高,能解析大于系统内存的文档
缺点:没有清晰的解析结构