saxParser为java中基于事件驱动的解析xml类:
新建xml文件:
//注意一定要将编码设为:utf-8
<?xml version="1.0" encoding="utf-8"?>
<trainList>
<北京西站>
<始发车站>
<车次>
<名字>T83次</名字>
<运行区间>北京西-南京</运行区间>
<开车时间>20:17</开车时间>
<终到时间>09:10</终到时间>
</车次>
<车次>
<名字>T119次</名字>
<运行区间>北京西-上海</运行区间>
<开车时间>23:25</开车时间>
<终到时间>10:10</终到时间>
</车次>
</始发车站>
<终到列车>
<车次>
<名字>T84次</名字>
<运行区间>南京-北京西</运行区间>
<开车时间>21:17</开车时间>
<终到时间>10:10</终到时间>
</车次>
<车次>
<名字>T200次</名字>
<运行区间>上海-北京西</运行区间>
<开车时间>21:17</开车时间>
<终到时间>10:10</终到时间>
</车次>
</终到列车>
</北京西站>
<广州站>
<始发车站>
<车次>
<名字>T186次</名字>
<运行区间>广东-武汉</运行区间>
<开车时间>22:17</开车时间>
<终到时间>09:24</终到时间>
</车次>
<车次>
<名字>T78次</名字>
<运行区间>广东-长沙</运行区间>
<开车时间>22:17</开车时间>
<终到时间>09:24</终到时间>
</车次>
</始发车站>
<终到列车>
<车次>
<名字>T78次</名字>
<运行区间>南京-广东</运行区间>
<开车时间>21:17</开车时间>
<终到时间>10:10</终到时间>
</车次>
<车次>
<名字>T193次</名字>
<运行区间>上海-广东</运行区间>
<开车时间>21:15</开车时间>
<终到时间>12:10</终到时间>
</车次>
</终到列车>
</广州站>
</trainList>
//新建jsp:
//注意这里将页面编码设为;gb2312,利用http表单参数设置javabean的参数,要将表单提交参数设置才会成功。
<%@ page contentType="text/html; charset=gb2312" %>
<%@ page import="com.ligaogang.SAXParser.*" %>
<jsp:useBean id="ok" class="com.ligaogang.SAXParser.SAXBean" scope="page"/>
<jsp:setProperty property="stationName" name="ok" param="stationName"/>
<jsp:setProperty property="startOrArrive" name="ok" param="startOrArrive"/>
<HTML>
<BODY>
<FONT size=2>
<form action="" method="post">
选择站名:
<select name="stationName">
<option value="广州站">广州站
<option value="北京西站">北京西站
</select>
选择始发或终到:
<input type="radio" name="startOrArrive" value="始发车站"/>
始发列车
<input type="radio" name="startOrArrive" value="终到列车" checked="default"/>
终到列车
<br>
<input type="submit" value="乘车"/>
</form>
<jsp:getProperty name="ok" property="stationName"/><br/>
<jsp:getProperty name="ok" property="startOrArrive"/>:<br/>
<jsp:getProperty name="ok" property="trainMessages"/><br/>
</FONT>
</BODY>
</HTML>
新建javabean文件;:
package com.ligaogang.SAXParser;
import java.util.Date;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.helpers.DefaultHandler;
public class SAXBean {
String stationName="北京西站";
String startOrArrive="终到列车";
StringBuffer trainMessage=new StringBuffer();
SAXParserFactory factory=null;
SAXParser saxParser=null;
MyHandler handler;
public void setStationName(String s)
{
System.out.println("set..."+stationName);
stationName=s.trim();
try{
byte b[]=stationName.getBytes("ISO-8859-1");
stationName=new String(b);
}catch(Exception e){
e.printStackTrace();
}
}
public String getStationName(){
System.out.println("get..."+stationName);
return this.stationName;
}
public void setStartOrArrive(String s)
{
startOrArrive=s.trim(); //去除其中的空格
try{
byte b[]=startOrArrive.getBytes("ISO-8859-1");
startOrArrive=new String(b); //将字符串编码为iso-8859-1
System.out.println("get..."+startOrArrive);
}catch(Exception e){
e.printStackTrace();
}
}
public String getStartOrArrive(){
return this.startOrArrive;
}
public StringBuffer getTrainMessages(){
try{
factory=SAXParserFactory.newInstance();
saxParser=factory.newSAXParser();
handler=new MyHandler(trainMessage,stationName,startOrArrive);
saxParser.parse("trainList.xml",handler);
}catch(Exception e){
e.printStackTrace();
}
return this.trainMessage;
}
class MyHandler extends DefaultHandler
{
StringBuffer trainMessages;
String stationName,startOrArrive;
boolean 站名标记=false,始发或终到标记=false;
MyHandler(StringBuffer mess,String stationN,String startOrArr)
{
trainMessages=mess;
stationName=stationN;
startOrArrive=startOrArr;
System.out.println("stationName:"+stationN+"trainMessages:"+mess.toString()+"startOrArrive:"+startOrArr+(new Date()).toString());
}
public void startDocument()
{
System.out.println("StartDocument....");
trainMessages.append("<table border=2>");
trainMessages.append("<tr>");
trainMessages.append("<th>车次名字</th>");
trainMessages.append("<th>运行区间</th>");
trainMessages.append("<th>发车时间</th>");
trainMessages.append("<th>终到时间</th>");
trainMessages.append("</tr>");
}
public void endDocument()
{
System.out.println("endDocument....");
trainMessages.append("</table>");
}
public void startElement(String uri,String localName,String qName,Attributes atts)
{
System.out.println("StartElement....");
System.out.println(qName);
System.out.println(stationName);
qName=qName.trim();
if(qName.equals(stationName)){
站名标记=true;
trainMessages.append(" "+qName);
}
if(qName.equals(startOrArrive)){
始发或终到标记=true;
}
if(qName.endsWith("车次")){
trainMessages.append("<tr>");
}
}
public void endElement(String uri,String localName,String qName){
System.out.println("EndElement....");
if(qName.startsWith(stationName)){
站名标记=false;
}
if(qName.startsWith(startOrArrive)){
始发或终到标记=false;
}
if(qName.endsWith("车次")){
trainMessages.append("</tr>");
}
}
public void characters(char[] ch,int start,int length){
System.out.println("characters....");
String text=new String(ch,start,length);
text=text.trim();
if(站名标记==true&&始发或终到标记==true&&text.length()>0){
String str=text.trim();
trainMessages.append("<td>"+str+"</td>");
}
}
}
}