首先,我们新建一个类,存放天气信息
				/*
				
						
 * Created on 2005-3-8
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 
				*/
				
						
				
				package
				 org.exoplatform.portlets.chinaweather.component;
				/**
				
						
 * 
				@author
				 Administrator
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 
				*/
				
						
				
				public
				 
				class
				 Weather {
 
				private
				 String city;
 
				private
				 String state;
 
				private
				 String temperature;
 
				private
				 String time;
 
				private
				 String wind;
 
				private
				 String windpower;
 
				private
				 
				long
				 UpdateTime;
 
				/**
				
						
  * 
				@return
				
						
  
				*/
				
						
 
				public
				 String getTemperature() {
  
				return
				 temperature;
 }
 
				/**
				
						
  * 
				@return
				
						
  
				*/
				
						
 
				public
				 String getTime() {
  
				return
				 time;
 }
 
				/**
				
						
  * 
				@return
				
						
  
				*/
				
						
 
				public
				 String getWind() {
  
				return
				 wind;
 }
 
				/**
				
						
  * 
				@return
				
						
  
				*/
				
						
 
				public
				 String getWindpower() {
  
				return
				 windpower;
 }
 
				/**
				
						
  * 
				@param
				 string
  
				*/
				
						
 
				public
				 
				void
				 setTemperature(String string) {
  temperature 
				=
				 string;
 }
 
				/**
				
						
  * 
				@param
				 string
  
				*/
				
						
 
				public
				 
				void
				 setTime(String string) {
  time 
				=
				 string;
 }
 
				/**
				
						
  * 
				@param
				 string
  
				*/
				
						
 
				public
				 
				void
				 setWind(String string) {
  wind 
				=
				 string;
 }
 
				/**
				
						
  * 
				@param
				 string
  
				*/
				
						
 
				public
				 
				void
				 setWindpower(String string) {
  windpower 
				=
				 string;
 }
 
				/**
				
						
  * 
				@return
				
						
  
				*/
				
						
 
				public
				 
				long
				 getUpdateTime() {
  
				return
				 UpdateTime;
 }
 
				/**
				
						
  * 
				@param
				 l
  
				*/
				
						
 
				public
				 
				void
				 setUpdateTime(
				long
				 l) {
  UpdateTime 
				=
				 l;
 }
 
				/**
				
						
  * 
				@return
				
						
  
				*/
				
						
 
				public
				 String getState() {
  
				return
				 state;
 }
 
				/**
				
						
  * 
				@param
				 string
  
				*/
				
						
 
				public
				 
				void
				 setState(String string) {
  state 
				=
				 string;
 }
 
				/**
				
						
  * 
				@return
				
						
  
				*/
				
						
 
				public
				 String getCity() {
  
				return
				 city;
 }
 
				/**
				
						
  * 
				@param
				 string
  
				*/
				
						
 
				public
				 
				void
				 setCity(String string) {
  city 
				=
				 string;
 }
}
具体的解析代码为:
				private
				 Weather parserWeather() 
				throws
				 Exception {
  Weather w 
				=
				 
				new
				 Weather();
  
				try
				 {
   
				//
				Parser parser =
   
				//
				 new Parser("file:
				//
				localhost/I:/projects/query.html");
				
						
				
				   Parser parser 
				=
				
						
    
				new
				 Parser(
				"
				http://weather.news.sohu.com/query.php?city=镇江
				"
				);
   
   parser.setEncoding(
				"
				GBK
				"
				);
   Node nodes[] 
				=
				 parser.extractAllNodesThatAre(TableTag.
				class
				);
   TableTag table 
				=
				 (TableTag) nodes[
				3
				];
   
				//
				temperature
				
						
				
				   StringNode[] stringNodes 
				=
				 table.digupStringNode(
				"
				镇江
				"
				);
   StringNode name 
				=
				 stringNodes[
				0
				];
   w.setCity(name.toPlainTextString());
   CompositeTag td 
				=
				 (CompositeTag) name.getParent();
   CompositeTag tr 
				=
				 (CompositeTag) td.getParent();
   
				int
				 columnNo 
				=
				 tr.findPositionOf(td);
   TableColumn nextColumn 
				=
				 (TableColumn) tr.childAt(
				5
				);
   Node expectedName 
				=
				 nextColumn.childAt(
				0
				);
   Node expectedName2 
				=
				 nextColumn.childAt(
				2
				);
   
				//
				System.out.println(expectedName.getText());
   
				//
				System.out.println(expectedName2.getText());
				
						
				
				   w.setState(expectedName.getText());
   w.setTemperature(expectedName2.getText());
   
				//
				time
				
						
				
				   stringNodes 
				=
				 table.digupStringNode(
				"
				时间
				"
				);
   name 
				=
				 stringNodes[
				0
				];
   
				//
				System.out.println(name.toPlainTextString());
				
						
				
				
						
   String time 
				=
				
						
    name
     .toPlainTextString()
     .substring(
				4
				, name.toPlainTextString().length())
     .trim();
   
				//
				System.out.println(time);
				
						
				
				   w.setTime(time);
   
				//
				wind
				
						
				
				   stringNodes 
				=
				 table.digupStringNode(
				"
				风向
				"
				);
   name 
				=
				 stringNodes[
				0
				];
   
				//
				System.out.println(name.toPlainTextString());
				
						
				
				
						
   String wind 
				=
				
						
    name
     .toPlainTextString()
     .substring(
				4
				, name.toPlainTextString().length())
     .trim();
   
				//
				System.out.println(wind);
				
						
				
				   w.setWind(wind);
   
				//
				wind power
				
						
				
				   stringNodes 
				=
				 table.digupStringNode(
				"
				风力
				"
				);
   name 
				=
				 stringNodes[
				0
				];
   
				//
				System.out.println(name.toPlainTextString());
				
						
				
				
						
   String windpower 
				=
				
						
    name
     .toPlainTextString()
     .substring(
				4
				, name.toPlainTextString().length())
     .trim();
   
				//
				System.out.println(windpower);
				
						
				
				   w.setWindpower(windpower);
   w.setUpdateTime(System.currentTimeMillis());
  } 
				catch
				 (ParserException e) {
   e.printStackTrace();
  }
  
				return
				 w;
 }
解析出来的代码必须做缓存处理,
				private
				 
				static
				 
				long
				 TIME_TO_LIVE 
				=
				 
				1000
				 
				*
				 
				60
				 
				*
				 
				60
				 
				*
				 
				12
				;
 
				private
				 Weather loadWeather() 
				throws
				 Exception {
  Weather weather 
				=
				 weather 
				=
				 (Weather) cache_.get(
				"
				chinaweather
				"
				);
  
				long
				 currentTime 
				=
				 System.currentTimeMillis();
  
				if
				 (weather 
				!=
				 
				null
				
						
   
				&&
				 currentTime 
				<
				 (weather.getUpdateTime() 
				+
				 TIME_TO_LIVE)) {
   cache_.remove(
				"
				chinaweather
				"
				);
   weather 
				=
				 
				null
				;
  }
  
				if
				 (weather 
				==
				 
				null
				) {
   
				synchronized
				 (cache_) {
    weather 
				=
				 parserWeather();
    cache_.put(
				"
				chinaweather
				"
				, weather);
   }
  }
  
				return
				 weather;
 }