解析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文件的实例。一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的...于是做了一个sax解析xml文件的实例
总的来说,SAX解析XML是一种高效且灵活的方法,适用于处理大型XML文档。通过自定义事件处理器,我们可以根据业务需求定制解析逻辑,从而有效地解析和利用XML数据。在实际项目中,结合源码分析和工具使用,如IDE中的...
本实例将通过SAX解析XML,帮助我们更好地理解和应用这一技术。 在SAX解析XML的过程中,主要涉及以下几个关键知识点: 1. **事件驱动模型**:SAX解析器在读取XML文档时,遇到每个元素、属性或文本节点时都会触发...
标题"读取RSS-SAX解析XML实例(java版)"所涉及的知识点主要集中在两个方面:一是如何读取RSS(Really Simple Syndication)数据,二是使用SAX解析XML文件。 RSS是一种用于发布新闻、博客和其他定期更新内容的格式...
在处理XML数据时,SAX...总结来说,Servlet结合SAX解析XML是一种有效的处理方式,尤其在处理大量XML数据时,能够提供良好的性能和资源管理。正确理解和使用这一技术,可以帮助你构建更高效、更健壮的Java Web应用。
以下是一个使用SAX解析XML文件的基本步骤: 1. **创建解析器**: 首先,我们需要创建一个SAX解析器实例。在Java中,这通常通过`SAXParserFactory`类完成。设置解析器属性,然后调用`newSAXParser()`方法获取`...
下面是一个SAX解析XML的示例(有点长,因为详细注解了SAX事件处理的所有方法),SAX API中主要有四种处理事件的接口,它们分别是ContentHandler,DTDHandler, EntityResolver 和 ErrorHandler 。下面的例子可能...
总结来说,"saxloadxml"项目提供了使用SAX解析XML文件的一个实例,可以帮助开发者了解如何利用SAX解析器处理XML文档,尤其是在性能和内存使用方面有较高要求的情况下。通过学习和实践这个项目,你可以提升处理XML...
在使用SAX解析XML前,需要创建一个解析器实例。Java中,可以使用`SAXParserFactory`来生成`SAXParser`,然后调用`parse()`方法解析XML文件。例如: ```java SAXParserFactory factory = SAXParserFactory.new...
总结来说,SAX解析XML本地读取的方式是一种高效且节省内存的处理方式,尤其适合处理大型XML文件。通过编写事件处理器,我们可以按需读取和处理XML文档的内容,而无需一次性加载整个文件到内存中。在实际开发中,了解...
在"一个关于sax解析xml的demo"中,我们可能会看到以下步骤: 1. 引入SAX解析器的相关库,如Java中的`org.xml.sax.*`包。 2. 创建一个实现了`org.xml.sax.helpers.DefaultHandler`接口的类,覆盖上述提到的事件...
以下是使用SAX解析XML的基本步骤: 1. 创建一个实现DefaultHandler或ContentHandler接口的类,重写其中的方法,如startElement()、endElement()和characters(),用于处理XML文档的结构和数据。 2. 实例化SAX解析器...
下面我们将深入探讨SAX解析XML的相关知识点。 1. **SAX解析器的初始化**:在Java中,我们通常使用`org.xml.sax.parsers.SAXParserFactory`类来创建并配置SAX解析器。首先,我们需要实例化一个SAXParserFactory对象...
在实际开发中,XPath常与DOM或SAX结合使用,先由DOM或SAX解析XML,然后用XPath进行查询。 实例应用: 假设我们有一个XML文件,内容如下: ```xml <employee id="1"> <name>John Doe <position>Manager ...
以下是一个简单的SAX解析XML的Android代码实例: ```java import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SaxExample extends ...
- `xmlSAXPaserDemo`可能是一个包含示例代码的Android项目,用于演示如何实际使用SAX解析XML文件。 - 项目中可能包括网络请求模块、SAX解析器处理类以及展示解析结果的UI部分。 通过以上步骤,开发者可以在...