saxParser在jsp中的运用

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>");
}
}
}
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值