生成和解析XML

生成和解析XML

      1.什么是XML,XML的作用是什么,如何编写XML文件?

            XML就是可扩展标记语言。与HTML相似都是标记语言。

            XML提供的标记都是自定义的;HTML提供的标记都是预先定义好的。

            XML用来存储数据的文本格式;HTML是同来设计网页。

            XML是一种简单的数据存储语言。

            如何编写XML文件?

      一个简单的XML文件格式

<?xml version="1.0"  encoding=”utf-8”?>
<students>
<student  id=”1001” >
    	<name>zhangsan</name>
    	<age>23</age>
    	<sex>男</sex>
</student>
<student  id=”1002”>
    	<name>lisi</name>
    	<age>24</age>
    	<sex>女</sex>
</student>
</students>

  说明:

          <?xml version="1.0"  encoding=”utf-8”?>---xml的文件头,表示xml文档开始。与html中的“<!DOCTYPE html>”作用相似。【土地】

          <students></students>----自定义的xml标记,表示一个xml文件的根元素。【树根】

          <student  id=”1001” ></student>---自定义的xml标记,表示一个xml文件的根元素中的子元素。【树枝】

          id=”1001”, id=”1002”----元素的属性,是一个键值对。

          <name></name>,<age></age>,<sex></sex>---自定义的xml标记,表示一个xml文件的根元素中的子子元素。【树叶】

          zhangsan,23,男...---都是被存储的具体数据值。【果实】

      注意:1.标记都是自定义的,成对出现“<name></name>”

                 2.元素可以携带属性,属性是一个键值对,可以出现多个

                 例如:<小狗 id=”1001” color=”黑色”></小狗>

                3.保存文件的时候,文件的后缀名是以“.xml”结尾

例如:

package com.wangxing.bean;

public class Person {
	private int id;
	private String name;
	private int age;
	private String address;
	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 int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	
}
package com.wangxing.XMLDemo.TestMain;

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

import com.wangxing.XMLDemo.Helper.XMLHelper;
import com.wangxing.XMLDemo.Util.XMLUtil;
import com.wangxing.bean.Person;

public class TestMain {
	public static void main(String a[]) throws Exception{
		Person per1=new Person();
		per1.setId(1001);
		per1.setName("zhangsan");
		per1.setAge(23);
		per1.setAddress("西安");
		
		Person per2=new Person();
		per2.setId(1002);
		per2.setName("lisi");
		per2.setAge(24);
		per2.setAddress("北京");
		
		List<Person> personlist=new ArrayList<Person>();
		personlist.add(per1);
		personlist.add(per2);
	}
}	

请将上面的personlist集合转换成xml文件?

<?xml version="1.0"  encoding=”utf-8”?>
<personlist>
<person perid=”1001” >
    	<pername>张三</pername>
    	<perage>23</perage>
    	<peraddress>西安</peraddress>
</person>
<person perid=”1002” >
    	<pername>李四</pername>
    	<perage>24</perage>
    	<peraddress>北京</peraddress>
</person>
</personlist>

      2.常见的XML文件的生成方式和解析方式

            2.1 XML文件的生成【Dom生成】

                        1.java默认的dom生成方式

package com.wangxing.XMLDemo.Helper;

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;

import com.wangxing.bean.Person;

public class XMLHelper {
	/**
	 * 1.java默认的dom生成方式
	 * @throws Exception 
	 * @throws Exception 
	 */
	public static void creatXMLByDom(List<Person> personlist) throws Exception{
		//得到Dom解析器工厂
		DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
		//得到从解析工厂得到解析器
		DocumentBuilder documentBuilder=builderFactory.newDocumentBuilder();
		//得到Document对象
		Document document=documentBuilder.newDocument();
		//设置文件头
		document.setXmlStandalone(true);
		//创建根元素1.[Dom生成中创建元素使用createElement("元素名称");]
		Element rootElement=document.createElement("personlist");
		for(Person person:personlist){
			//创建子元素
			Element personElement=document.createElement("person");
			//为子元素设置属性值2.[Dom生成中设置元素属性值使用setAttribute("属性名称","属性值");]
			personElement.setAttribute("perid", String.valueOf(person.getId()));
			//创建子子元素
			Element pernameElement=document.createElement("pername");
			Element perageElement=document.createElement("perage");
			Element peraddressElement=document.createElement("peraddress");
			//为子子元素设置数据值3.[Dom生成中设置元素数据值使用setTextContent("数据值");]
			pernameElement.setTextContent(person.getName());
			perageElement.setTextContent(String.valueOf(person.getAge()));
			peraddressElement.setTextContent(person.getAddress());
			//将子子元素添加到子元素中4.[Dom生成中将元素添加到另一元素中使用appendChild(Node[节点] node)]
			personElement.appendChild(pernameElement);
			personElement.appendChild(perageElement);
			personElement.appendChild(peraddressElement);
			//将子元素添加到根元素中
			rootElement.appendChild(personElement);
		}
		//将根元素添加到Document对象中
		document.appendChild(rootElement);
		//创建TransformerFactory工厂对象
		TransformerFactory tff=TransformerFactory.newInstance();
		//创建Transformer对象
		Transformer tf=tff.newTransformer();
		//设置输出内容是否换行
		tf.setOutputProperty(OutputKeys.INDENT,"yes");
		//创建xml文件并写入内容
		//Transform将xml文件转换为Resullt(Source[接口],Result[接口]);
        //DOMSource 实现了Source接口 new DOMSource(Node[接口] node);
        //Document 实现了Node[节点]接口
        
        //StreamResult 实现了Result接口 new StreamResult(File file);
        //new File(String string);
		tf.transform(new DOMSource(document), new StreamResult(new File("person1.xml")));
	}
	
}

测试:

package com.wangxing.XMLDemo.TestMain;

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

import com.wangxing.XMLDemo.Helper.XMLHelper;
import com.wangxing.bean.Person;

public class TestMain {
	public static void main(String a[]) throws Exception{
		Person per1=new Person();
		per1.setId(1001);
		per1.setName("zhangsan");
		per1.setAge(23);
		per1.setAddress("西安");
		
		Person per2=new Person();
		per2.setId(1002);
		per2.setName("lisi");
		per2.setAge(24);
		per2.setAddress("北京");
		
		List<Person> personlist=new ArrayList<Person>();
		personlist.add(per1);
		personlist.add(per2);
		
		XMLHelper.creatXMLByDom(personlist);
	}
}

                        2.使用第三方开发包

                            A.dom4j

package com.wangxing.XMLDemo.Helper;

import java.io.FileOutputStream;
import java.io.UnsupportedEncodingException;
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;

import com.wangxing.bean.Person;

public class XMLHelper {
	/**
	 * 2.使用dom4j生成方式
	 * @throws Exception 
	 * @throws UnsupportedEncodingException 
	 */
	public static void createXMLByDom4j(List<Person> personlist) throws Exception{
		//创建document对象
		Document document=DocumentHelper.createDocument();
		//创建根元素
		Element rootElement=document.addElement("personlist");
		for(Person person:personlist){
			//创建子元素
			Element personElement=rootElement.addElement("person");
			//为子元素设置属性
			personElement.addAttribute("perid", String.valueOf(person.getId()));
			//创建子子元素
			Element pernameElement=personElement.addElement("pername");
			Element perageElement=personElement.addElement("perage");
			Element peraddressElement=personElement.addElement("peraddress");
			//为子子元素添加数据
			pernameElement.setText(person.getName());
			perageElement.setText(String.valueOf(person.getAge()));
			peraddressElement.setText(person.getAddress());
		}
		//设置生成xml的格式
		OutputFormat format=OutputFormat.createPrettyPrint();
		//设置编码格式
		format.setEncoding("UTF-8");
		//创建XML字符输出流
		XMLWriter writer=new XMLWriter(new FileOutputStream("person2.xml"),format);
		//设置是否转义,默认使用转义字符
		writer.setEscapeText(false);
		//写出DOcument对象
		writer.write(document);
	}
}

测试:

package com.wangxing.XMLDemo.TestMain;

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

import com.wangxing.XMLDemo.Helper.XMLHelper;
import com.wangxing.bean.Person;

public class TestMain {
	public static void main(String a[]) throws Exception{
		Person per1=new Person();
		per1.setId(1001);
		per1.setName("zhangsan");
		per1.setAge(23);
		per1.setAddress("西安");
		
		Person per2=new Person();
		per2.setId(1002);
		per2.setName("lisi");
		per2.setAge(24);
		per2.setAddress("北京");
		
		List<Person> personlist=new ArrayList<Person>();
		personlist.add(per1);
		personlist.add(per2);
		
		XMLHelper.createXMLByDom4j(personlist);
	}
}

                           B.jdom

package com.wangxing.XMLDemo.Helper;

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;

import com.wangxing.bean.Person;

public class XMLHelper {
	/**
	 * 3.使用jdom生成方式
	 */
	public static void createXMLByJdom(List<Person> personlist)throws Exception{
		//创建根元素
		Element rootElement=new Element("personlist");
		for(Person person:personlist){
			//创建子元素
			Element personElement=new Element("person");
			//为子元素设置属性值
			personElement.setAttribute("perid",String.valueOf(person.getId()));
			//创建子子元素
			Element nameElement=new Element("pername");
			Element ageElement=new Element("perage");
			Element addressElement=new Element("peraddress");
			//为子子元素设置数据
			nameElement.setText(person.getName());
			ageElement.setText(String.valueOf(person.getId()));
			addressElement.setText(person.getAddress());
			//将子子元素添加到子元素
			personElement.addContent(nameElement);
			personElement.addContent(ageElement);
			personElement.addContent(addressElement);
			//将子元素添加到根元素里
			rootElement.addContent(personElement);
		}
		//依赖根元素创建Document对象
		Document document=new Document(rootElement);
		//输出Document
		Format format=Format.getCompactFormat();
		//设置换行Tab或空格
		format.setIndent(" ");
		format.setEncoding("UTF-8");
		//创建XMLOutputter对象
		XMLOutputter output=new XMLOutputter(format);
		output.output(document,new FileOutputStream(new File("person3.xml")));
	}
}

测试:

package com.wangxing.XMLDemo.TestMain;

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

import com.wangxing.XMLDemo.Helper.XMLHelper;
import com.wangxing.bean.Person;

public class TestMain {
	public static void main(String a[]) throws Exception{
		Person per1=new Person();
		per1.setId(1001);
		per1.setName("zhangsan");
		per1.setAge(23);
		per1.setAddress("西安");
		
		Person per2=new Person();
		per2.setId(1002);
		per2.setName("lisi");
		per2.setAge(24);
		per2.setAddress("北京");
		
		List<Person> personlist=new ArrayList<Person>();
		personlist.add(per1);
		personlist.add(per2);
		
		XMLHelper.createXMLByJdom(personlist);
	}
}

                        3.使用字符串拼接的方式创建XML

package com.wangxing.XMLDemo.Helper;

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

import com.wangxing.bean.Person;

public class XMLHelper {
	/**
	 * 4.拼接字符串的方式
	 */
	public static void creatXMLByString(List<Person> personlist)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("<personlist>");
		Stringbuilder.append("\r\n");
		//便利需要被生成成xml文件的集和
		for(Person person:personlist){
			Stringbuilder.append("\t<person perid=\""+person.getId()+"\">");
			Stringbuilder.append("\r\n");
			Stringbuilder.append("\t\t<pername>"+person.getName()+"</pername>");
			Stringbuilder.append("\r\n");
			Stringbuilder.append("\t\t<perage>"+person.getAge()+"</perage>");
			Stringbuilder.append("\r\n");
			Stringbuilder.append("\t\t<peraddress>"+person.getAddress()+"</peraddress>");
			Stringbuilder.append("\r\n");
			Stringbuilder.append("\t</person>");
			Stringbuilder.append("\r\n");
		}
		Stringbuilder.append("</personlist>");
		xmlcontent=Stringbuilder.toString();
		System.out.println(xmlcontent);
		//创建输出流对象,将创建好的xml,保存到文件中
		File file=new File("person4.xml");
		BufferedWriter out=new BufferedWriter(new FileWriter(file));
		out.write(xmlcontent);
		out.close();
	}
}

测试:

package com.wangxing.XMLDemo.TestMain;

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

import com.wangxing.XMLDemo.Helper.XMLHelper;
import com.wangxing.bean.Person;

public class TestMain {
	public static void main(String a[]) throws Exception{
		Person per1=new Person();
		per1.setId(1001);
		per1.setName("zhangsan");
		per1.setAge(23);
		per1.setAddress("西安");
		
		Person per2=new Person();
		per2.setId(1002);
		per2.setName("lisi");
		per2.setAge(24);
		per2.setAddress("北京");
		
		List<Person> personlist=new ArrayList<Person>();
		personlist.add(per1);
		personlist.add(per2);
		
		XMLHelper.creatXMLByString(personlist);
	}
}

            2.2 XML文件的解析

                       实际上就是将xml文件中保存的数据取出,转换成java对象

                       1.DOM(Document Object Model)解析

                        Java默认的Dom  /  dom4j  /  jdom

package com.wangxing.XMLDemo.Util;

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.Node;
import org.w3c.dom.NodeList;

import com.wangxing.bean.Person;

public class XMLUtil {
	/**
	 * 1.java默认的Dom解析xml
	 */
	public static List<Person> parseXMLByDom()throws Exception{
		//定义保存对象的集和
		List<Person> personlist=new ArrayList<Person>();
		//得到解析工厂
		DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
		//从解析工厂得到解析器
		DocumentBuilder builder=builderFactory.newDocumentBuilder();
		//将需要被解析的xml文件读取成Document对象
		Document document=builder.parse("person1.xml");
		//从Document对象中取出一组子元素
		NodeList personNodeList=document.getElementsByTagName("person");
		for(int i=0;i<personNodeList.getLength();i++){
			Person person=new Person();
			Node personNode=personNodeList.item(i);
			//得到属性值
			String id=personNode.getAttributes().item(0).getNodeValue();
			person.setId(Integer.parseInt(id));
			//从子元素中得到包含有子子元素的一组集和
			NodeList nodeList=personNode.getChildNodes();
			for(int j=0;j<nodeList.getLength();j++){
				//得到子子元素
				Node node=nodeList.item(j);
				if(node.getNodeName().equals("pername")){
					String name=node.getTextContent();
					person.setName(name);
				}
				if(node.getNodeName().equals("perage")){
					String age=node.getTextContent();
					person.setAge(Integer.parseInt(age));
				}
				if(node.getNodeName().equals("peraddress")){
					String address=node.getTextContent();
					person.setAddress(address);
				}
			}
			personlist.add(person);
		}
		return personlist;
	}
}

测试:

package com.wangxing.XMLDemo.TestMain;

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

import com.wangxing.XMLDemo.Util.XMLUtil;
import com.wangxing.bean.Person;

public class TestMain {
	public static void main(String a[]) throws Exception{
		Person per1=new Person();
		per1.setId(1001);
		per1.setName("zhangsan");
		per1.setAge(23);
		per1.setAddress("西安");
		
		Person per2=new Person();
		per2.setId(1002);
		per2.setName("lisi");
		per2.setAge(24);
		per2.setAddress("北京");
		
		List<Person> personlist=new ArrayList<Person>();
		personlist.add(per1);
		personlist.add(per2);
		
		List<Person> personList=XMLUtil.parseXMLByDom();
		for(Person person:personList){
			System.out.println(person.getId()+"\r\n"+person.getName()+"\r\n"+person.getAge()+"\r\n"+person.getAddress());
		}
        }
}

                       2.dom4j解析xml

package com.wangxing.XMLDemo.Util;

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

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

import com.wangxing.bean.Person;

public class XMLUtil {
	/**
	 * 2.使用dom4j解析xml
	 */
	public static List<Person> parseXMLByDom4j()throws Exception{
		//定义保存对象的集和
		List<Person> personlist=new ArrayList<Person>();
		//创建xml解析器对象
		SAXReader saxReader=new SAXReader();
		//通过解析器对象读取被解析的xml文件为document对象
		Document document=saxReader.read(new File("person1.xml"));
		//得到根元素
		Element rootElement=document.getRootElement();
		//从根元素中得到一组person子元素
		List<Element> elementlist=rootElement.elements("person");
		for(Element personelement:elementlist){
			Person person=new Person();
			//得到子元素的属性值
			person.setId(Integer.parseInt(personelement.attributeValue("perid")));
			//得到子子元素的数据值
			String pername=personelement.element("pername").getText();
			person.setName(pername);
			String perage=personelement.elementText("perage");
			person.setAge(Integer.parseInt(perage));
			String peraddress=personelement.element("peraddress").getText();
			person.setAddress(peraddress);
			personlist.add(person);
		}
		return personlist;
	}
}

测试:

​

package com.wangxing.XMLDemo.TestMain;

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

import com.wangxing.bean.Person;

public class TestMain {
	public static void main(String a[]) throws Exception{
		Person per1=new Person();
		per1.setId(1001);
		per1.setName("zhangsan");
		per1.setAge(23);
		per1.setAddress("西安");
		
		Person per2=new Person();
		per2.setId(1002);
		per2.setName("lisi");
		per2.setAge(24);
		per2.setAddress("北京");
		
		List<Person> personlist=new ArrayList<Person>();
		personlist.add(per1);
		personlist.add(per2);
		
		for(Person person:XMLUtil.parseXMLByDom4j()){
			System.out.println(person.getId()+"\r\n"+person.getName()+"\r\n"+person.getAge()+"\r\n"+person.getAddress());
		}
        }
}​

                       3.jdom解析xml

package com.wangxing.XMLDemo.Util;

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;

import com.wangxing.bean.Person;

public class XMLUtil {
	/**
	 *3.使用jdom解析xml 
	 */
	public static List<Person> parseXMLByJdom()throws Exception{
		//创建保存对象的集和
		List<Person> personlist=new ArrayList<Person>();
		//得到解析器对象
		SAXBuilder saxBuilder=new SAXBuilder();
		//读取被解析的xml文件成Document
		Document document=saxBuilder.build(new File("person1.xml"));
		//得到根元素
		Element rootElement=document.getRootElement();
		//从根元素中得到一组person的子元素
		List<Element> elementList=rootElement.getChildren("person");
		for(Element PersonElement:elementList){
			Person person=new Person();
			//得到子元素的属性
			person.setId(Integer.parseInt(PersonElement.getAttributeValue("perid")));
			//得到子子元素的数据值
			person.setName(PersonElement.getChildText("pername"));
			person.setAge(Integer.parseInt(PersonElement.getChildText("perage")));
			person.setAddress(PersonElement.getChildText("peraddress"));
			personlist.add(person);
		}
		
		return personlist;
	}
}

测试:

​

package com.wangxing.XMLDemo.TestMain;

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

import com.wangxing.bean.Person;

public class TestMain {
	public static void main(String a[]) throws Exception{
		Person per1=new Person();
		per1.setId(1001);
		per1.setName("zhangsan");
		per1.setAge(23);
		per1.setAddress("西安");
		
		Person per2=new Person();
		per2.setId(1002);
		per2.setName("lisi");
		per2.setAge(24);
		per2.setAddress("北京");
		
		List<Person> personlist=new ArrayList<Person>();
		personlist.add(per1);
		personlist.add(per2);
		
		for(Person person:XMLUtil.parseXMLByJdom()){
			System.out.println(person.getId()+"\r\n"+person.getName()+"\r\n"+person.getAge()+"\r\n"+person.getAddress());
		}
        }
}​

                       4.sax解析xml

package com.wangxing.XMLDemo.Util;

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

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

import com.wangxing.bean.Person;

public class XMLUtil {
	/**
	 * 4.使用sax解析方式
	 */
	public static List<Person> parseXMLBySax()throws Exception{
		//定义保存对象的集和
		//List<Person> personlist=new ArrayList<Person>();
		//得到SAX解析工厂
		SAXParserFactory saxfac=SAXParserFactory.newInstance();
		//从工厂中得到解析器对象
		SAXParser saxParser=saxfac.newSAXParser();
		MyDefaultHandler myDefaultHandler=new MyDefaultHandler();
		saxParser.parse(new File("person4.xml"), myDefaultHandler);
		return  myDefaultHandler.getPersonList();
	}
}

测试:

​

package com.wangxing.XMLDemo.TestMain;

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

import com.wangxing.bean.Person;

public class TestMain {
	public static void main(String a[]) throws Exception{
		Person per1=new Person();
		per1.setId(1001);
		per1.setName("zhangsan");
		per1.setAge(23);
		per1.setAddress("西安");
		
		Person per2=new Person();
		per2.setId(1002);
		per2.setName("lisi");
		per2.setAge(24);
		per2.setAddress("北京");
		
		List<Person> personlist=new ArrayList<Person>();
		personlist.add(per1);
		personlist.add(per2);
		
		for(Person person:XMLUtil.parseXMLBySax()){
			System.out.println(person.getId()+"\r\n"+person.getName()+"\r\n"+person.getAge()+"\r\n"+person.getAddress());
		}
        }
}​

      SAX(Simple API for XML)解析xml文件的原理是基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现 给定的标签的时候,它可以激活一个回调方法,告诉该方法指定的标签已经找到,如果这个指定的标记中中有我们需要数据值就解析,没有就不用处理。

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

              2.可以在某个条件得到满足时停止解析,不必解析整个文档。

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

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

  3.XML文件解析方式的区别

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

      优点:结构清晰明了。

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

      SAX(Simple API for XML)解析xml文件的原理是基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的标签的时候,它可以激活一个回调方法,告诉该方法指定的标签已经找到,如果这个指定的标记中中有我们需要数据值就解析,没有就不用处理。

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

              2.可以在某个条件得到满足时停止解析,不必解析整个文档。

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

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

猜你喜欢

转载自blog.csdn.net/m0_49935332/article/details/114156268