sax解析xml详解

 解析xml并打印出所有的属性名称和文本内容

 

1 test-a.xml文件

<?xml version="1.0" encoding="UTF-8"?>
	<result>
			<man>
				<name>sky</name>
				<age>18</age>
				<sex>1</sex>
			</man>
	</result>

 2 自定义handler的编写

package com.java.xml.SAX;

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

	/**
	 * 自定义sax解析器
	 * @author Administrator
	 *
	 */
	public class MySAXHandler extends DefaultHandler {
		
		public void print(String str)
		{
			System.out.println(str);
		}
		
		public void startDocument() throws SAXException 
		{
			print("sax event:start document");
		}
		
		public void endDocument() throws SAXException
		{
			print("sax event:end document");
		}
		
		public void startElement(String nameSpaceUri,
				String localName,String qName,
				Attributes attr) throws SAXException
		{
			print("sax event:start element["+qName+"]");
			
			//如果有属性,打印属性
			for (int i = 0; i < attr.getLength(); i++)
			{
				print("attribute:"+attr.getLocalName(i)+"value:"+attr.getValue(i));
			}
		}
		
		public void endElement(String nameSpaceUri,
				String localName,String qName) throws SAXException
		{
			print("sax event:end element["+qName+"]");
		}
		
		public void characters(char[] ch,int start,int length) throws SAXException
		{
			print("sax event:characters["+new String(ch,start,length).trim()+"]");
		}

	}

 3 java sax访问,主要功能是遍历xml文件并按层次打印出所有的节点名称和文本内容

package com.java.xml.SAX;

	import java.io.File;

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

	/**
	 * 为解决DOM的问题,出现了SAX.SAX ,事件驱动。
	 * 当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,
	 * 发送事件,程序员编写响应这些事件的代码,保存数据。
	 * 优点:不用事先调入整个文档,占用资源少;
	 * SAX解析器代码比DOM解析器代码小,适于Applet,下载。
	 * 缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;
	 * 无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;
	 * 使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少;
	 * @author Administrator
	 *
	 */
	public class SaxA {

		/**
		 * dom4j解析
		 */
		public static void dom()
		{
			try 
			{
				File xml = new File("D:/新的开始/学习笔记/java学习/xml解析/test-a.xml");
				SAXParserFactory factory = SAXParserFactory.newInstance();
				SAXParser parser = factory.newSAXParser();
				parser.parse(xml, new MySAXHandler());
				
	//			 // 建立SAX 2解析器...
	//	         XMLReader xr = XMLReaderFactory.createXMLReader();
	//
	//	         // 安装ContentHandler...
	//	         xr.setContentHandler( new MySAXHandler() );
	//
	//	            // 解析文件...
	//	         xr.parse( new InputSource(new FileReader("D:/新的开始/学习笔记/java学习/xml解析/test-a.xml" )));
		
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		/**
		 * @param args
		 */
		public static void main(String[] args) {
			// TODO Auto-generated method stub
			
			dom();
			
		}

	}

 4 执行SaxA对象的main方法,输出如下:

sax event:start document
	sax event:start element[result]
	sax event:characters[]
	sax event:start element[man]
	sax event:characters[]
	sax event:start element[name]
	sax event:characters[sky]
	sax event:end element[name]
	sax event:characters[]
	sax event:start element[age]
	sax event:characters[18]
	sax event:end element[age]
	sax event:characters[]
	sax event:start element[sex]
	sax event:characters[1]
	sax event:end element[sex]
	sax event:characters[]
	sax event:end element[man]
	sax event:characters[]
	sax event:end element[result]
	sax event:end document
 4 注意点:

给我的感觉,sax解析时也会长生空白的element,

(sax event:characters[]这种就是空白text-element).

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值