xml解析技术-jaxp-sax解析 - html/css语言栏目:html.

TestSax类:

package day06_parser.sax;
/**
 * xml的解析技术:JAXP是Java API for XML Processing的英文字头缩写,
 * 中文含义是:用于XML文档处理的使用Java语言编写的编程接口。JAXP支持DOM、SAX、XSLT等标准。
 * 下面我们研究两种解析方式:
 * 1.dom解析	2.sax解析:Simple API for XML
 * 下面是dom解析的实例。
 * JAXP-DOM解析实例:
 * 下面的实例实现的功能是,通过javax.xml包实现sax方式的xml的解析
 * 具体的操作有增加节点,删除节点,修改节点内容,查询节点信息
 */
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import day06_parser.domain.Book;

public class TestSax {
	/*
	xml的第二种解析方式:sax:simple api for xml
  	1.SAX 是事件驱动的 XML 处理方法
	2.逐行扫描文档,一边扫描一边解析 
	3.SAX来说就是操作复杂 
	4.仅需实现部分接口时扩展org.xml.sax.helpers.DefaultHandler类 
	5.DefaultHandler类默认的空实现 

	 */

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		demo1();
	}
	public static void demo1() throws Exception{
		//1.工厂
		SAXParserFactory factory=SAXParserFactory.newInstance();
		//2.解析器
		SAXParser parser=factory.newSAXParser();
		//解析xml
		//定义默认的defaultHander类,处理的方法
		MyDefaultHandler dh=new MyDefaultHandler();
		parser.parse(new File("db.xml"), dh);
		List
 
   allBookList = dh.getData(); //获得所有的书籍(
  JavaBean)数据
		for (Book book : allBookList) {
			System.out.println(book);
		}
		
		//###############################3
		//存放方式1: 一个map存放一本书
		Map
  
    data = new HashMap
   
    (); data.put("id", "b001"); data.put("title", "xxxx"); data.put("price", "100"); //方式2:面向对象,用于封装数据对象,JavaBean Book book = new Book(); book.setId("b001"); book.setTitle("java web"); } } 
   
  
 


sax解析的核心类:MyDefaultHander类

package day06_parser.sax;
//这个类就是sax解析的核心类。
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import day06_parser.domain.Book;

public class MyDefaultHandler extends DefaultHandler {
	//1用于缓存处理数据
	private List
 
   data;
	// 4 用于缓存当前的标签名称(元素名称)
	private String elementName; 
	//以上的这些数据在dom方式里面存储在document对象里面了。
	@Override
	public void startDocument() throws SAXException {
		//2对容器进行初始化
		data = new ArrayList
  
   (); } /** * * xml没有约束 * uri # null * localname#null * qName # 元素名称 * * xml 约束 * uri # 命名空间值 targatNamespace="xxxxx" * localname # 元素名称 
   
     */ @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if("book".equals(qName)){ // 3.1 说明解析到了一个新书 Book book = new Book(); // 3.2 添加到list中 data.add(book); // 3.3 缓存id属性 book.setId(attributes.getValue("id")); } this.elementName = qName; } @Override public void characters(char[] ch, int start, int length) throws SAXException { String value = new String(ch, start, length); if("title".equals(elementName)){ //value 表示title的数据 data.get(data.size() - 1).setTitle(value); } if("price".equals(elementName)){ //value 表示title的数据 data.get(data.size() - 1).setPrice(value); } if("author".equals(elementName)){ //value 表示title的数据 data.get(data.size() - 1).setAuthor(value); } //使用过后清空缓存 this.elementName = null; } @Override public void endElement(String uri, String localName, String qName) throws SAXException { System.out.println("元素结束"); } @Override public void endDocument() throws SAXException { System.out.println("文档结束"); } /** * 用于返回处理过的所有数据 * @return */ public List
    
      getData() { return data; } } 
     


另外还用到了两个类:

book类-javebean:

package day06_parser.domain;
/**
 * 普通的类,她就是javabean
 * 	* 提供相应的私有字段,封装数据
 *  * 提供字段的相应的getter或setter方法
 * @author hym
 *
 */
public class Book {
	private String id;
	private String title;
	private String price;
	private String author;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getPrice() {
		return price;
	}
	public void setPrice(String price) {
		this.price = price;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	@Override
	public String toString() {
		return "Book [id=" + id + ", title=" + title + ", price=" + price
				+ ", author=" + author + "]";
	}
}


需要解析的xml文件:

db.xml

      


       
  
        
        android 
        
         28
         
        
         胡爷
         
         
  
       
        修改了节点的文本内容 
        修改了节点的文本内容修改了节点的文本内容 
        
         修改了节点的文本内容
        修改了节点的文本内容 
        
         修改了节点的文本内容
        修改了节点的文本内容 
        

      


* qName # 前缀:名称
    上一篇: 畅谈HTML开发 - html/css语言栏目:html.css - 自学ph
    下一篇: xml解析-jaxp之dom解析 - html/css语言栏目:html.css
返回顶部
跳到底部

Copyright 2011-2024 南京追名网络科技有限公司 苏ICP备2023031119号-6 乌徒帮 All Rights Reserved Powered by Z-BlogPHP Theme By open开发

请先 登录 再评论,若不是会员请先 注册