解析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实例
NULL 博文链接:https://mazhihui.iteye.com/blog/1535280
下面是一个SAX解析XML的示例(有点长,因为详细注解了SAX事件处理的所有方法),SAX API中主要有四种处理事件的接口,它们分别是ContentHandler,DTDHandler, EntityResolver 和 ErrorHandler 。下面的例子可能...
java读取RSS-SAX解析XML的实例,java语言编写,使用时只需要在main方法中将参数换成自己的RSS地址即可。
Dom,Sax,Xpath解析XML实例,有源码,实例。简单易用,直接可用
dom,dom4j,sax解析xml 文件经典实例,内置详细注解
<?xml version="1.0" encoding="utf-8"?> <users> <user id="A001"> <name>zhaoyun</name> <age>40</age> </user> <user id="b001"> <name>Liubie</name> <age>25</age> </user> </users>
SAX解析xml文件并显示在android虚拟机上实例源码,可以学习一下SAX解析技术
使用sax解析xml,有详细的解析及源代码实例
java解析xml实例 java解析xml实例 java解析xml实例
读取和解析xml文件
JAVA100例之实例69 JAVA使用SAX解析XML
JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML
android用sax解析xml文件实例源码
xml为安卓工程(采用SAX解析xml),test.xml为xml实例,可以部署到你的web工程下载下来。
简单的sax和dom解析xml实例 注意 在android上运行的.