`
yjshengshe
  • 浏览: 204572 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

sax解析xml实例一

    博客分类:
  • java
 
阅读更多

 解析xml并把xml中用户信息提取出来

 

1 test-b.xml文件

<?xml version="1.0" encoding="UTF-8"?>
	<result>
			<man>
				<name>sky</name>
				<age>25</age>
				<sex>男</sex>
				<demo>人皇</demo>
			</man>
			<man>
				<name>fly</name>
				<age>23</age>
				<sex>男</sex>
				<demo>中国小兽皇</demo>
			</man>
			<woman>
				<name>小仓美眉</name>
				<age>20</age>
				<sex>女</sex>
				<demo>魔兽女子第一人</demo>
			</woman>
			<woman>
				<name>doudou</name>
				<age>20</age>
				<sex>女</sex>
				<demo>美女主持啊</demo>
			</woman>
	</result>

 2 用户信息People类

package com.java.xml.dom;

	public class People {
		
		private String name;
		
		private String age;
		
		private String sex;
		
		private String demo;

		public String getName() {
			return name;
		}

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

		public String getAge() {
			return age;
		}

		public void setAge(String age) {
			this.age = age;
		}

		public String getSex() {
			return sex;
		}

		public void setSex(String sex) {
			this.sex = sex;
		}

		public String getDemo() {
			return demo;
		}

		public void setDemo(String demo) {
			this.demo = demo;
		}
	}

 3 sax自定义handler编写

package com.java.xml.SAX;

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

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

	import com.java.xml.dom.People;

	/**
	 * 自定义sax解析器
	 * @author Administrator
	 *
	 */
	public class MySAXHandlerB extends DefaultHandler {
		
		//people集合
		private List<People> userList = new ArrayList<People>(16);
		
		//节点文本内容
		private String content;
		
		//people对象
		private People people = null;
		
		public MySAXHandlerB()
		{
			
		}
		
		public MySAXHandlerB(List<People> userList)
		{
			this.userList = userList;
		}
		
		/**
		 * 文档开始
		 */
		public void startDocument() throws SAXException 
		{
		}
		
		/**
		 * 文档结束
		 */
		public void endDocument() throws SAXException
		{
		}
		
		/**
		 * 节点开始
		 */
		public void startElement(String nameSpaceUri,
				String localName,String qName,
				Attributes attr) throws SAXException
		{	
			//如果有属性,打印属性
			for (int i = 0; i < attr.getLength(); i++)
			{
			}
			
			if ("man".equals(qName) || "woman".equals(qName))
			{
				people = new People();
			}
			
			//清空文本内容
			content = "";
		}
		
		/**
		 * 节点结束
		 */
		public void endElement(String nameSpaceUri,
				String localName,String qName) throws SAXException
		{
			if ("age".equals(qName))
			{
				people.setAge(content);
			}
			
			if ("name".equals(qName))
			{
				people.setName(content);
			}
			
			if ("sex".equals(qName))
			{
				people.setSex(content);
			}
			
			if ("demo".equals(qName))
			{
				people.setDemo(content);
			}
			
			if ("man".equals(qName) || "woman".equals(qName))
			{
				userList.add(people);
			}
		}
		
		/**
		 * 文本获取
		 */
		public void characters(char[] ch,int start,int length) throws SAXException
		{
			//赋予文本内容
			content = new String(ch,start,length).trim();
		}

	}

 4 sax解析xml执行类

package com.java.xml.SAX;

	import java.io.File;
	import java.util.ArrayList;
	import java.util.List;

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

	import com.java.xml.dom.People;

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

		/**
		 * 输出到控制台
		 * @param i
		 * @param people
		 */
		public static void print(int i,People people)
		{
			StringBuffer sb = new StringBuffer(100);
			sb.append(i+1).append(":姓名 ").append(people.getName())
			.append(" 年龄 ").append(people.getAge()).append(" 性别 ")
			.append(people.getSex()).append(" 备注 ").append(people.getDemo());
			System.out.println(sb.toString());
		}
		
		/**
		 * dom4j解析
		 */
		public static void dom()
		{
			try 
			{
				//people集合
				List<People> userList = new ArrayList<People>(16);
				//people对象
				People people = null;
				
				File xml = new File("D:/新的开始/学习笔记/java学习/xml解析/test-b.xml");
				SAXParserFactory factory = SAXParserFactory.newInstance();
				SAXParser parser = factory.newSAXParser();
				
				//调用自定义Handler处理xml文档
				parser.parse(xml, new MySAXHandlerB(userList));
				
				//控制台输出
				for (int i = 0; i< userList.size(); i++)
				{
					people = userList.get(i);
					print(i,people);
				}
				
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		/**
		 * @param args
		 */
		public static void main(String[] args) {
			// TODO Auto-generated method stub
			
			dom();
			
		}

	}

 5 执行SaxB对象的main方法,输出如下:

1:姓名 sky 年龄 25 性别 男 备注 人皇
	2:姓名 fly 年龄 23 性别 男 备注 中国小兽皇
	3:姓名 小仓美眉 年龄 20 性别 女 备注 魔兽女子第一人
	4:姓名 doudou 年龄 20 性别 女 备注 美女主持啊
 
分享到:
评论

相关推荐

    SAX解析XML文件实例

    SAX解析XML文件的实例。一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的...于是做了一个sax解析xml文件的实例

    SAX解析XML实例

    总的来说,SAX解析XML是一种高效且灵活的方法,适用于处理大型XML文档。通过自定义事件处理器,我们可以根据业务需求定制解析逻辑,从而有效地解析和利用XML数据。在实际项目中,结合源码分析和工具使用,如IDE中的...

    sax解析xml实例

    本实例将通过SAX解析XML,帮助我们更好地理解和应用这一技术。 在SAX解析XML的过程中,主要涉及以下几个关键知识点: 1. **事件驱动模型**:SAX解析器在读取XML文档时,遇到每个元素、属性或文本节点时都会触发...

    读取RSS-SAX解析XML实例(java版)

    标题"读取RSS-SAX解析XML实例(java版)"所涉及的知识点主要集中在两个方面:一是如何读取RSS(Really Simple Syndication)数据,二是使用SAX解析XML文件。 RSS是一种用于发布新闻、博客和其他定期更新内容的格式...

    Servlet利用SAX解析XML文档

    在处理XML数据时,SAX...总结来说,Servlet结合SAX解析XML是一种有效的处理方式,尤其在处理大量XML数据时,能够提供良好的性能和资源管理。正确理解和使用这一技术,可以帮助你构建更高效、更健壮的Java Web应用。

    Sax解析xml文件

    以下是一个使用SAX解析XML文件的基本步骤: 1. **创建解析器**: 首先,我们需要创建一个SAX解析器实例。在Java中,这通常通过`SAXParserFactory`类完成。设置解析器属性,然后调用`newSAXParser()`方法获取`...

    android 使用Sax解析XML 源码实例

    下面是一个SAX解析XML的示例(有点长,因为详细注解了SAX事件处理的所有方法),SAX API中主要有四种处理事件的接口,它们分别是ContentHandler,DTDHandler, EntityResolver 和 ErrorHandler 。下面的例子可能...

    sax解析xml文件

    总结来说,"saxloadxml"项目提供了使用SAX解析XML文件的一个实例,可以帮助开发者了解如何利用SAX解析器处理XML文档,尤其是在性能和内存使用方面有较高要求的情况下。通过学习和实践这个项目,你可以提升处理XML...

    sax解析xml尤其是获取元素的值或者内容

    在使用SAX解析XML前,需要创建一个解析器实例。Java中,可以使用`SAXParserFactory`来生成`SAXParser`,然后调用`parse()`方法解析XML文件。例如: ```java SAXParserFactory factory = SAXParserFactory.new...

    sax解析xml本地读取xml

    总结来说,SAX解析XML本地读取的方式是一种高效且节省内存的处理方式,尤其适合处理大型XML文件。通过编写事件处理器,我们可以按需读取和处理XML文档的内容,而无需一次性加载整个文件到内存中。在实际开发中,了解...

    一个关于sax解析xml的demo

    在"一个关于sax解析xml的demo"中,我们可能会看到以下步骤: 1. 引入SAX解析器的相关库,如Java中的`org.xml.sax.*`包。 2. 创建一个实现了`org.xml.sax.helpers.DefaultHandler`接口的类,覆盖上述提到的事件...

    java解析xml数据---sax解析器

    以下是使用SAX解析XML的基本步骤: 1. 创建一个实现DefaultHandler或ContentHandler接口的类,重写其中的方法,如startElement()、endElement()和characters(),用于处理XML文档的结构和数据。 2. 实例化SAX解析器...

    sax解析xml

    下面我们将深入探讨SAX解析XML的相关知识点。 1. **SAX解析器的初始化**:在Java中,我们通常使用`org.xml.sax.parsers.SAXParserFactory`类来创建并配置SAX解析器。首先,我们需要实例化一个SAXParserFactory对象...

    Dom,Sax,Xpath解析XML实例

    在实际开发中,XPath常与DOM或SAX结合使用,先由DOM或SAX解析XML,然后用XPath进行查询。 实例应用: 假设我们有一个XML文件,内容如下: ```xml &lt;employee id="1"&gt; &lt;name&gt;John Doe &lt;position&gt;Manager ...

    anroid SAX解析xml文件及实例

    以下是一个简单的SAX解析XML的Android代码实例: ```java import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SaxExample extends ...

    android使用SAX解析xml

    - `xmlSAXPaserDemo`可能是一个包含示例代码的Android项目,用于演示如何实际使用SAX解析XML文件。 - 项目中可能包括网络请求模块、SAX解析器处理类以及展示解析结果的UI部分。 通过以上步骤,开发者可以在...

Global site tag (gtag.js) - Google Analytics