字符串範例:
<xml> <irregular> <period period="2019"> <item guid="074996CA0B3E23877AC5FF148B1D0F65" name="001" start="20190402" end="20190702" year="2019" period="1" /> <item guid="D9E10527CA14F7A57C3FA1883AA7E8CE" name="002" start="20190718" end="20190912" year="2019" period="2" /> </period> <period period="2020"> <item guid="1C64C6360FB0A9ACF8F263A0CF610E57" name="1" start="20200709" end="20200722" year="2020" period="1" /> </period> </irregular> </xml>
編寫對應實體類:
package interactive.bean; import com.company.dna.core.type.GUID; public class DateTimeInfo { private GUID guid; private String name; private String start; private String end; private String year; private String period; private String dateTime; // get set 方法 }
解析實例:
/** * TODO XML 解析 * @param dataTime * @param irregularText * @return */ public static String fromXmlGetDataTime(String irregularText) { // irregularText爲 XML字符串 String dataTime = ""; Map<String,List<DateTimeInfo>> map = new HashMap<String, List<DateTimeInfo>>(); try { Document document = DocumentHelper.parseText(irregularText); Element root = document.getRootElement(); Iterator<Element> irregularIt = root.elementIterator("irregular"); while (irregularIt.hasNext()) { Element irregularNext = irregularIt.next(); Iterator periodIt = irregularNext.elementIterator("period"); while (periodIt.hasNext()) { Element periodNext = (Element) periodIt.next(); // String key = periodNext.attributeValue("period"); List<DateTimeInfo> list = new ArrayList<DateTimeInfo>(); int count = 0; // Iterator itemIt = periodNext.elementIterator("item"); while (itemIt.hasNext()) { count++; DateTimeInfo info = new DateTimeInfo(); Element itemEle = (Element) itemIt.next(); //未設置 GUID info.setName(itemEle.attributeValue("name")); info.setStart(itemEle.attributeValue("start")); info.setEnd(itemEle.attributeValue("end")); info.setYear(itemEle.attributeValue("year")); info.setPeriod(itemEle.attributeValue("period")); //DateTime String str = key+"B"; for (int j = 0; j < 4 - (count+"").length(); j++) { str += "0"; } str += count; info.setDateTime(str); list.add(info); } map.put(key, list); } } // 獲取當前時間 比較時間在哪個區間 String date = new SimpleDateFormat("yyyyMMdd").format(new Date()); String key = date.substring(0, 4); List<DateTimeInfo> list = map.get(key); if(null != list && list.size()>0){ for (DateTimeInfo dateTimeInfo : list) { String start = dateTimeInfo.getStart(); String end = dateTimeInfo.getEnd(); if(date.compareTo(start) >= 0 && date.compareTo(end) <= 0){ dataTime = dateTimeInfo.getDateTime(); break; } } } } catch (DocumentException e) { e.printStackTrace(); } return dataTime; }