public List<DBObject> filterHistory(String xmlSource) {
		List<DBObject> list = new ArrayList<DBObject>();
		Document dom = Jsoup.parse(xmlSource);
		// System.out.println(xmlSource);
		Elements eles = dom.getElementsByTag("tbody");
		for (Element ele : eles) {
			String text = ele.text();
			if (text.contains("Who") && text.contains("When")) {
				Elements tableEles = ele.getElementsByTag("td");
				int times = 0;
				for (int i = 0; i < tableEles.size(); i++) {
					Element tableCell = tableEles.get(i);
					if (tableCell.hasAttr("rowspan")) {
						DBObject dbobj = new BasicDBObject();
						times = Integer.parseInt(tableCell.attr("rowspan"));
						dbobj.put("who", tableEles.get(i).text());
						i++;
						dbobj.put("when", tableEles.get(i).text());
						List<DBObject> subList = new ArrayList<DBObject>();
						for (int j = 0; j < times; j++) {
							DBObject subdbobj = new BasicDBObject();
							i++;
							subdbobj.put("what", tableEles.get(i).text());
							i++;
							subdbobj.put("removed", tableEles.get(i).text());
							i++;
							subdbobj.put("added", tableEles.get(i).text());
							subList.add(subdbobj);
						}
						dbobj.put("detail", subList);
						list.add(dbobj);
					} else {
						System.out.println("Internal Error!");
					}
				}
			}
		}
		// System.out.println(list);
		return list;
	}