`

采集SAX解析XML

 
阅读更多
/***
 * 采集SAX解析XML
 * 优点:解析快,占用内在少;是采集的事件驱动模式解析的;
 * 事件驱动:它并不需要解析完整个文档,而是按内容的顺序解析文档,
 * SAX会判断当前读到的字符是否符合XML语法的某部分,如果符合就会触发事件;事件就是回调方法
 * 
 * @author Administrator
 * 
 */
public class SaxXml
{

	/**
	 * 解析后并返回一个对象集合
	 * 
	 * @param inStream
	 *            xml输入流
	 * @return 解析后并返回一个对象集合
	 * @throws ParserConfigurationException
	 * @throws SAXException
	 * @throws IOException
	 */
	public List<Person> saxParser(InputStream inStream)
			throws ParserConfigurationException, SAXException, IOException
	{
		// 创建一个生成SAX对象的工厂
		SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
		// 新闻一个SAX解析器
		SAXParser saxParser = saxParserFactory.newSAXParser();
		// 通过这个对象来解析:是通过驱动事件解析
		PersonParser personParser = new PersonParser();
		// 把要解析的xml输入流通过personParser解析
		saxParser.parse(inStream, personParser);
		// 关闭流
		inStream.close();
		// 返回解析后对对象集合
		return personParser.getPersons();
	}

	/**
	 * 处理xml的事件类
	 * @author Administrator
	 * 
	 */
	private final class PersonParser extends DefaultHandler
	{
		private List<Person> persons = null;
		private Person person = null;
		private String TAG = null;

		public List<Person> getPersons()
		{
			return persons;
		}

		/**
		 * 当执行到第一行时就是:开始文档语法;就会执行这个方法;
		 * 这时我们创建一个Person的List集合
		 */
		public void startDocument() throws SAXException
		{
			persons = new ArrayList<Person>();
		}

		/**
		 * 当符合元素语法时就会执行这个方法;我们这里判断的是;
		 * person元素
		 */
		public void startElement(String uri, String localName, String name,
				Attributes attributes) throws SAXException
		{
			if ("person".equals(localName))
			{
				person = new Person();
				person.setId(new Integer(attributes.getValue(0)));
			}
			TAG = localName;
		}

		/**
		 * 这里是判断的是文本节点
		 */
		public void characters(char[] ch, int start, int length)
				throws SAXException
		{
			if (TAG != null)
			{
				if ("name".equals(TAG))
				{
					person.setName(new String(ch, start, length));
				} else if ("age".equals(TAG))
				{
					person.setAge(new Short(new String(ch, start, length)));
				}
			}
		}


		/**
		 * 如果一个元素执行完后.就把这个元素放到List集合里面
		 * 如:当执行到</person>时会执行这个方法
		 */
		public void endElement(String uri, String localName, String name)
				throws SAXException
		{
			if ("person".equals(localName))
			{
				persons.add(person);
				person = null;
			}
			TAG = null;
		}

	}
}

 

<?xml version="1.0" encoding="UTF-8"?>
<persons>
	<person id="1">
		<name>secn1</name>
		<age>231</age>
	</person>
	<person id="2">
		<name>secn2</name>
		<age>232</age>
	</person>
	<person id="3">
		<name>secn3</name>
		<age>233</age>
	</person>
	<person id="4">
		<name>secn4</name>
		<age>234</age>
	</person>
</persons>

 

public void testReadSAX() throws ParserConfigurationException, SAXException, IOException{
	
		SaxXml sax = new SaxXml();
		InputStream inStream = this.getClass().getClassLoader().getResourceAsStream("secn.xml");
		List<Person> persons = sax.saxParser(inStream);
		for(Person person:persons){
			Log.i("SaxTest", String.valueOf(person.getName()));
		}
	}

 

分享到:
评论

相关推荐

    xml1.zip_XML解析_hillxv2_standardh2k_touchcrq_变电站XML

    而SAX解析则采用事件驱动的方式,逐个读取XML元素,适用于处理大型XML文件,因为它不占用大量内存。 在变电站自动化领域,XML被用来标准化和交换设备配置、状态信息等数据。SCL(IED Communication Schema)文件是...

    Mer-No.01 采集Capture湖北v1xml格式输出(3.0.12-G)

    XML解析则涉及到DOM(Document Object Model)、SAX(Simple API for XML)或XPath等技术。开发此类工具时,可能使用Python的BeautifulSoup、Scrapy框架,或者是Java的JAXB、DOM4J库。源码分析可以帮助我们了解其...

    环保212协议解析java

    2. **XML解析**:Java中可以使用DOM、SAX或StAX API来解析XML文档。DOM一次性加载整个文档,适合小型文件;SAX是事件驱动的,按需读取,适合大文件;StAX允许程序逐个读取事件,提供了更细粒度的控制。 3. **字节流...

    DMS.rar_dms_java data collect_数据采集_采集

    而DOM或SAX解析器则能够帮助处理结构化的XML数据,便于进一步的数据分析。 在DMS系统中,数据采集流程可能包括以下几个步骤:首先,系统通过定义数据源,如数据库、API接口或者文件系统,确定需要采集的数据类型和...

    hj212-master_hj212解析器_hj212-master_hj-212java_212_212协议解析demo_源码

    可以使用Java的I/O流处理网络数据,利用正则表达式或DOM/SAX解析XML,以及自定义数据结构来存储和操作解析出的数据。 5. 解析示例: 一个简单的HJ212协议解析器可能包含以下组件: - 数据包接收器:负责接收TCP/IP...

    Java 解析国标hj212协议

    Java中常用的XML库有DOM、SAX、JAXB,JSON库有Gson、Jackson、org.json等。解析器会将接收到的字符串转换为对象结构,便于进一步处理。 7. **网络通信**:为了接收和发送hj212协议的数据,开发者可能使用Java的...

    数据采集分析的java代码

    在Java中,DOM(文档对象模型)、SAX(简单API for XML)和StAX(流式API for XML)是常见的XML解析方式,它们各有优缺点,适用于不同的场景。 在提供的Java_WOSS1压缩包中,很可能包含了实现以上功能的源代码。...

    数据采集源码web版asp.net

    - **MSXML2**:一个用于处理XML文档的对象模型,提供了DOM和SAX两种解析方式。 - **System.Text.RegularExpressions**:用于处理正则表达式的命名空间,可以用来匹配、替换字符串中的特定模式。 ### 三、核心功能...

    基于统一建模的北向数据自动化分析平台设计与实现.pdf

    而SAX解析方式对XML文档进行事件驱动式解析,不需要解析整个文档,适合对大型XML文档进行高效处理。 7. 系统展现层的MVC模式:模型(Model)、视图(View)和控制器(Controller)分工明确,相互关联。这种设计模式有助于...

    soapClient.zip

    2. **库文件**:可能包含了一些用于处理XML、HTTP请求和响应的库,例如DOM或SAX解析器。 3. **配置文件**:可能包含SOAP服务的URL、认证信息以及其他设置。 4. **示例或测试代码**:帮助用户了解如何使用这个...

    Gather:java实现的数据采集系统

    3. **数据解析**:收集到的数据可能需要解析为结构化信息,这可能涉及到DOM、SAX或Pull解析器对XML数据的处理,或者使用JSON库如Jackson或Gson解析JSON数据。对于HTML,Jsoup库可以方便地提取和操作文档内容。 4. *...

    铁路供电安全检测监测系统接口规范.doc

    2. 采用SAX解析技术处理XML数据,解析器可自编程。 3. 支持TCP/IP(FTP)网络协议,能跨越局域网和广域网进行数据传输。 使用策略包括: 1. 数据上传时间依据数据接收方需求来确定。 2. 调用频率可根据需要设定,...

    heritrix-1.14.0-src

    Heritrix支持多种解析器,如DOM解析、SAX解析等。 4. **存档模块(Archiving Modules)**:保存抓取到的数据,可以是本地文件系统、数据库或远程存档服务。Heritrix提供了多种存档策略,比如基于文件系统的存档、...

    一个基于Android的系统开发.docx

    为此,项目采用了SAX(Simple API for XML)方法来进行高效解析。SAX是一种基于事件驱动的XML解析方式,它包含以下关键组件: - **DTDHandler**:用于访问XML DTD内容。 - **ErrorHandler**:用于处理解析过程中的...

    Java基础教程1.pdf(2021年整理精品文档).pdf

    6. XML:涵盖了 XML 语法、XML 解析(SAX、DOM)、Dom4j 等内容。 7. JDBC 核心 API:介绍 JDBC 核心 API、JDBC 优化(缓存技术、批处理技术、连接池技术)等内容。 8. 软件工程及 OOAD:涵盖了软件过程和软件活动...

    Java爬虫框架.pdf

    还包括了多种不同的解析技术,如“HTML SAX”,“nekohtml”,“HTMLParser”和“Regex”,这显示了框架提供了多种解析方式以适应不同需求。 5. Handler(处理器): 处理器是用于处理解析后数据的组件。文件中...

    Java基础教程1.pdf(2021年整理精品文档).docx

    - 学习XML语法,理解DOM模型,并使用SAX和DOM4j进行解析。 7. **数据库操作**: - 通过JDBC API进行数据库交互,理解其设计原则,提高数据库访问效率。 - 实现基于XML数据格式的题库处理,掌握SQL前端工具和数据...

Global site tag (gtag.js) - Google Analytics