java中使用SAX方式解析XML文件

java中使用SAX方式解析XML文件,方法如下:

(1)定义一个继承自DefaultHandler的handler

package net.yedward.xml;

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

public class SAXParseHandler extends DefaultHandler {
	/**
	 * 用来解析XML文件的开始标签
	 */
	@Override
	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
		// 调用父类的startElement方法
		super.startElement(uri, localName, qName, attributes);
		// 如果解析到了url标签
		if (qName.equalsIgnoreCase("url")) {
			System.out.println("遍历url开始");
			// 获取url标签上id属性的值
			// String value = attributes.getValue("id");
			for (int i = 0; i < attributes.getLength(); i++) {
				// 获取所有的属性名和属性值
				System.out.println(attributes.getQName(i) + ":" + attributes.getValue(i));
			}
		}
	}

	/**
	 * 用来解析XML文件的结束标签
	 */
	@Override
	public void endElement(String uri, String localName, String qName) throws SAXException {
		super.endElement(uri, localName, qName);
		// 判断是否解析一个URL结束
		if (qName.equalsIgnoreCase("url")) {
			System.out.println("遍历url结束");
		}
	}

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

	/**
	 * 用来标识解析结束
	 */
	@Override
	public void endDocument() throws SAXException {
		super.endDocument();
		System.out.println("SAX解析结束");
	}

	/**
	 * 解析XML中的文本
	 */
	@Override
	public void characters(char[] ch, int start, int length) throws SAXException {
		super.characters(ch, start, length);
		String value = new String(ch, start, length);
		if (!value.trim().equals("")) {
			System.out.println(value);
		}
	}
}

(2)主要SAX解析类

package net.yedward.xml;

import java.io.IOException;

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

import org.xml.sax.SAXException;

/**
 * 使用SAX方式解析XML
 * @author YEDWARD
 *
 */
public class SAXXMLTest {
	public static void main(String[] args) {
		SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
		try {
			SAXParser saxParser = saxParserFactory.newSAXParser();
			saxParser.parse("sitemap.xml", new SAXParseHandler());
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

这样就OK了,解析XML的方式很多,这里介绍的是SAX,至于各种方法的区别,以后总结。

本文标题:java中使用SAX方式解析XML文件

本文链接:http://yedward.net/?id=30

本文版权归作者所有,欢迎转载,转载请以文字链接的形式注明文章出处。

相关文章