public static List<TrainQueryInfo> parserQueryInfo(String response) {
		List<TrainQueryInfo> tqis = new ArrayList<TrainQueryInfo>();
		response = response.replaceAll("&nbsp;", "");
		logger.info("Response String is " + response);
		// Session 过期
		if ("-10".equals(response)) {
			logger.info("Session is timeout!");
			return tqis;
		}
		String[] number = response.split("\\\\n");
		for (int i = 0; i < number.length; i++) {
			String info = number[i];
			if (StringUtils.isNotBlank(info)) {
				String[] ticketInfo = info.split(",");
				TrainQueryInfo trainQueryInfo = new TrainQueryInfo();
				trainQueryInfo.setTrainCode(ticketInfo[0]);
				trainQueryInfo.setTrainNo(ticketInfo[1].substring(ticketInfo[1].lastIndexOf("\'>") + 2,
						ticketInfo[1].lastIndexOf("</span>")));
				String startstation = isStartOrEndStation(ticketInfo[2]);
				trainQueryInfo.setFromStation(startstation.substring(0, startstation.lastIndexOf("<br>")));
				trainQueryInfo.setFromStationName(convertStation(trainQueryInfo.getFromStation()));
				trainQueryInfo.setFromStationCode(TicketUtil.getCityCode(startstation.substring(0,
						startstation.lastIndexOf("<br>"))));
				trainQueryInfo.setStartTime(startstation.substring(startstation.lastIndexOf("<br>") + 4,
						startstation.length()));
				String endstation = isStartOrEndStation(ticketInfo[3]);
				trainQueryInfo.setToStation(endstation.substring(0, endstation.lastIndexOf("<br>")));
				trainQueryInfo.setToStationName(convertStation(trainQueryInfo.getToStation()));
				trainQueryInfo.setToStationCode(TicketUtil.getCityCode(endstation.substring(0,
						endstation.lastIndexOf("<br>"))));
				trainQueryInfo
						.setEndTime(endstation.substring(endstation.lastIndexOf("<br>") + 4, endstation.length()));
				trainQueryInfo.setTakeTime(ticketInfo[4]);

				Map<SeatType, String> seatDatas = trainQueryInfo.getSeatDatas();
				seatDatas.put(SeatType.BUSS_SEAT, isExistTicket(ticketInfo[5]));
				seatDatas.put(SeatType.BEST_SEAT, isExistTicket(ticketInfo[6]));
				seatDatas.put(SeatType.ONE_SEAT, isExistTicket(ticketInfo[7]));
				seatDatas.put(SeatType.TWO_SEAT, isExistTicket(ticketInfo[8]));
				seatDatas.put(SeatType.VAG_SLEEPER, isExistTicket(ticketInfo[9]));
				seatDatas.put(SeatType.SOFT_SLEEPER, isExistTicket(ticketInfo[10]));
				seatDatas.put(SeatType.HARD_SLEEPER, isExistTicket(ticketInfo[11]));
				seatDatas.put(SeatType.SOFT_SEAT, isExistTicket(ticketInfo[12]));
				seatDatas.put(SeatType.HARD_SEAT, isExistTicket(ticketInfo[13]));
				seatDatas.put(SeatType.NONE_SEAT, isExistTicket(ticketInfo[14]));
				seatDatas.put(SeatType.OTH_SEAT, isExistTicket(ticketInfo[15]));

				String infos = ticketInfo[16];
				String[] trainInfo = getMMString(infos);
				if (trainInfo.length > 0) {
					trainQueryInfo.setMmStr(trainInfo[12]);
					trainQueryInfo.setTrainno4(trainInfo[3]);
					trainQueryInfo.setYpInfoDetail(trainInfo[11]);
					trainQueryInfo.setFormStationNo(trainInfo[9]);
					trainQueryInfo.setToStationNo(trainInfo[10]);
					trainQueryInfo.setLocationCode(trainInfo[13]);
				}

				// --：没有该席别；*：未到开始时间；有：有并且数量充足；数字：有但数量有限：无：已售完
				boolean validForPurchase = false;
				for (Map.Entry<SeatType, String> me : seatDatas.entrySet()) {
					String value = me.getValue();
					if (value.equals("--") || value.equals("无") || value.equals("*")) {
						continue;
					}
					validForPurchase = true;
					break;
				}
				trainQueryInfo.setValidForPurchase(validForPurchase);

				tqis.add(trainQueryInfo);
			}
		}
		return tqis;
	}