java自学day3-xml解析-SAX解析

主体代码:

package cn.sxt.server;

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

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

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

public class TestXml {
	public static void main(String[] args) throws Exception, SAXException {
		// SAX解析
		// 1.获取解析工厂
		SAXParserFactory factory = SAXParserFactory.newInstance();
		// 2.从工厂获取解析器
		SAXParser parse = factory.newSAXParser();
		// 3.编写处理器
		// 4.加载文档Document处理器
		BookHandler bookhandler = new BookHandler();
		// 5.解析
		parse.parse(Thread.currentThread().getContextClassLoader().getResourceAsStream("cn/sxt/server/books.xml"),
				bookhandler);
		
		List<books> bb = bookhandler.getBookl();
		for (books book : bb) {
			System.out.println(book.getName()+"的价格为:"+book.getPrice()+"作者为:"+book.getCourse());
		}
	}
}

class BookHandler extends DefaultHandler {
	private List<books> bookl;
	private books b;
	private String flag;

	@Override
	public void startDocument() throws SAXException {
		bookl = new ArrayList<>();
	}

	@Override
	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
		if(null!=qName) {
			flag = qName;
			if (flag.equals("book")) {
				b = new books();
			}
		}
		
	}

	public List<books> getBookl() {
		return bookl;
	}

	@Override
	public void characters(char[] ch, int start, int length) throws SAXException {
		String contents = new String(ch, start, length);
		if (flag.equals("name")) {
			b.setName(contents);
		} else if (flag.equals("course")) {
			b.setCourse(contents);
		} else if (flag.equals("price")) {
			b.setPrice(Integer.valueOf(contents));
		}
	}

	@Override
	public void endElement(String uri, String localName, String qName) throws SAXException {
		if(null!=qName) {
			if (qName.equals("book")) {
				bookl.add(b);
			}
		}
		flag=null;

	}

	@Override
	public void endDocument() throws SAXException {
	}
}

解析的xml:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 声明内部DTD -->
<!DOCTYPE books [
	<!ELEMENT books (book+)>
	<!ELEMENT book (name, course, price)>
	<!ATTLIST book id CDATA #REQUIRED>
	<!ELEMENT name (#PCDATA)>
	<!ELEMENT course (#PCDATA)>
	<!ELEMENT price (#PCDATA)>
]>
<books>
	<book id="1">
		<name>java</name>
		<course>张三</course>
		<price>89</price>
	</book>
	<book id="2">
		<name>sql</name>
		<course>李四</course>
		<price>58</price>
	</book>
	<book id="3">
		<name>Oracle</name>
		<course>王五</course>
		<price>40</price>
	</book>
</books>

book类:

package cn.sxt.server;

public class books {
	private String name;
	private String course;
	private int price;

	public books() {
	}

	public books(String name, String course, int price) {
		super();
		this.name = name;
		this.course = course;
		this.price = price;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getCourse() {
		return course;
	}

	public void setCourse(String course) {
		this.course = course;
	}

	public int getPrice() {
		return price;
	}

	public void setPrice(int price) {
		this.price = price;
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值