慕课网——SAX解析XML

前端之家收集整理的这篇文章主要介绍了慕课网——SAX解析XML前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
//这是Test
public class SAXTest {

	public static void main(String[] args) {
		// 获取一个SAXParserFactory的实例
		SAXParserFactory factory = SAXParserFactory.newInstance();
		// 通过factory获取SAXParser实例
		try {
			SAXParser parser = factory.newSAXParser();
			// 创建SAXParserHandler对象
			SAXParserHandler handler = new SAXParserHandler();
			parser.parse("books.xml",handler);
			System.out.println("共有" + handler.getBookList().size() + "本书");
			for (Book book : handler.getBookList()) {
				System.out.println(book.getId());
				System.out.println(book.getName());
				System.out.println(book.getAuthor());
				System.out.println(book.getYear());
				System.out.println(book.getPrice());
				System.out.println(book.getLanguage());
				System.out.println("--------完成----------");
			}
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
<pre name="code" class="java">//这是Handler
//这里继承这个包:org.xml.sax.helpers.DefaultHandler
public class SAXParserHandler extends DefaultHandler {
	int bookIndex = 0;
	// 为了方便方法之间调用参数,将value做成全局变量
	String value = null;
	// 为了方便方法之间调用参数,将book做成全局变量
	Book book = null;
	//为了防止每次都会覆盖掉book中的内容,这里定义一个ArrayList存储
	ArrayList<Book> bookList = new ArrayList<Book>();
	public ArrayList<Book> getBookList() {
		return bookList;
	}

	/**
	 * 用来表示解析开始
	 */
	public void startDocument() throws SAXException {
		super.startDocument();
		System.out.println("SAX解析开始");
	}

	/**
	 * 用来表示解析开始
	 */
	public void endDocument() throws SAXException {
		super.endDocument();
		System.out.println("SAX解析结束");
	}

	/**
	 * 用来遍历xml文件的开始标签
	 */
	public void startElement(String uri,String localName,String qName,Attributes attributes) throws SAXException {
		// 调用DefaultElement类的startElement方法
		super.startElement(uri,localName,qName,attributes);
		// 开始解析book元素的属性
		if (qName.equals("book")) {
			// 为了将解析的内容存入book对象中
			book = new Book();
			// Book book = new Book();
			bookIndex++;
			System.out.println("=============开始" + bookIndex
					+ "书内容的============");
			/**
			 * 已知属性名称,根据属性名称获取属性值 String value = attributes.getValue("id");
			 * System.out.println("book的属性值是: " + value);
			 */
			// 若不知道属性名称,做成循环遍历
			int num = attributes.getLength();
			for (int i = 0; i < num; i++) {
				System.out.print("book元素的" + (i + 1) + "个属性名是: "
						+ attributes.getQName(i));
				System.out.println("----属性值是: " + attributes.getValue(i));
				if (attributes.getQName(i).equals("id")) {
					book.setId(attributes.getValue(i));
				}
			}
		} else if (!qName.equals("book") && !qName.equals("bookstore")) {
			System.out.println("节点名是: " + qName);
		}
	}

	/**
	 * 用来遍历xml文件的结束标签
	 */
	// qName决定了是遍历当中的setId、setElement还是setAuthor
	public void endElement(String uri,String qName)
			throws SAXException {
		// 调用DefaultHandler类的endElement方法
		super.endElement(uri,qName);
		// 判断是否针对一本书已经遍历结束
		if (qName.equals("book")) {
			bookList.add(book);
			//在遍历下一本书之前,清空book
			book = null;
			System.out.println("=============结束" + bookIndex
					+ "书内容的============");
		} else if (qName.equals("name")) {
			book.setName(value);
		} else if (qName.equals("author")) {
			book.setAuthor(value);
		} else if (qName.equals("year")) {
			book.setYear(value);
		} else if (qName.equals("price")) {
			book.setPrice(value);
		} else if (qName.equals("language")) {
			book.setLanguage(value);
		}
	}

	// ch指的是整个xml文档内容,start指的是开始节点,length指的是元素长
	// 同样这里的空行也会作为需要解析的text
	public void characters(char[] ch,int start,int length)
			throws SAXException {
		super.characters(ch,start,length);
		// String value = new String(ch,length);
		// 为了方便方法之间调用参数,将value做成全局变量
		value = new String(ch,length);
		if (!value.trim().equals("")) {
			System.out.println("节点值是: " + value);
		}
	}
}
<pre name="code" class="java">//这是Book
public class Book {
	private String id;
	private String name;
	private String author;
	private String year;
	private String price;
	private String language;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public String getYear() {
		return year;
	}
	public void setYear(String year) {
		this.year = year;
	}
	public String getPrice() {
		return price;
	}
	public void setPrice(String price) {
		this.price = price;
	}
	public String getLanguage() {
		return language;
	}
	public void setLanguage(String language) {
		this.language = language;
	}
}

猜你在找的XML相关文章