import java.io.File; import java.io.FileInputStream; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class LineChartLocalUpdates { @SuppressWarnings("unchecked") public void readXml(String xmlFileName, Map<String, String> elementMap) { if (xmlFileName == null || !xmlFileName.equals("")) { xmlFileName = "D:\\workspace-web\\Test\\src\\xml\\new_file.xml"; } if (elementMap == null || elementMap.size() == 0) { elementMap = new HashMap<String, String>(); elementMap.put("7 day", "10"); elementMap.put("15 day", "20"); elementMap.put("30 day", "30"); } SAXReader saxReader = new SAXReader(); try { /** * 先通过 org.dom4j.io.SAXReader 读入整份XML文档 */ Document xmlDoc = saxReader.read(new FileInputStream(new File( xmlFileName))); Element rootElement = xmlDoc.getRootElement(); updateSeries(rootElement); Iterator iterator = rootElement.elementIterator("graphs"); while (iterator.hasNext()) { Element graphsElements = (Element) iterator.next(); List graphElementsList = graphsElements.elements("graph"); configGraphElementsList(elementMap, graphElementsList); // updateSeriesElements(seriesElementsList); } System.out.println(xmlDoc.asXML()); } catch (Exception e) { } } @SuppressWarnings("unchecked") private void updateSeries(Element rootElement) { Iterator iterator = rootElement.elementIterator("series"); while (iterator.hasNext()) { Element element = (Element) iterator.next(); List valueElementsList = element.elements("value"); removeExpiredElements(valueElementsList); updateSeriesElements(valueElementsList); } } @SuppressWarnings("unchecked") private void updateSeriesElements(List elementsList) { Element lastValueElement = (Element) elementsList.get(elementsList .size() - 1); int xidValue = Integer.parseInt(lastValueElement.attributeValue("xid")) + 1; // System.out.println(value); Element seriesElement = lastValueElement.getParent() .addElement("value"); configNewSeriesValueElement(seriesElement, String.valueOf(xidValue)); } private void configNewSeriesValueElement(Element seriesElement, String xidValue) { GregorianCalendar gc = new GregorianCalendar(); SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd"); gc.add(Calendar.HOUR_OF_DAY, - CacheFileDirManager.CACHE_UPDATE_DATE); seriesElement.addAttribute("xid", xidValue); seriesElement.addCDATA(sf.format(gc.getTime())); } @SuppressWarnings("unchecked") private void configGraphElementsList(Map<String, String> elementMap, List graphElementsList) { Iterator iterator = graphElementsList.iterator(); while (iterator.hasNext()) { Element graphElement = (Element) iterator.next(); List valueElementsList = graphElement.elements("value"); boolean hasDescription = removeExpiredElements(valueElementsList); updateValueElements(hasDescription, valueElementsList, elementMap); } } @SuppressWarnings("unchecked") private void updateValueElements(boolean hasDescription, List valueElementsList, Map<String, String> elementMap) { Element lastValueElement = (Element) valueElementsList .get(valueElementsList.size() - 1); int xidValue = Integer.parseInt(lastValueElement.attributeValue("xid")) + 1; // System.out.println(value); Element element = lastValueElement.getParent().addElement("value"); configNewElement(element, String.valueOf(xidValue), hasDescription, elementMap); } private void configNewElement(Element element, String xidValue, boolean hasDescription, Map<String, String> elementMap) { String title = element.getParent().attributeValue("title"); String descriptionValue = elementMap.get(title); element.addAttribute("xid", xidValue); element.addCDATA(descriptionValue); if (hasDescription) { element.addAttribute("description", descriptionValue); } } @SuppressWarnings("unchecked") private boolean removeExpiredElements(List valueElementsList) { String descriptionValue = null; for (int i = 0; i < valueElementsList.size(); i++) { // ((Element) fourElementsList.get(0)).getName(); Element valueElements = ((Element) valueElementsList.get(i)); Attribute xidAttr = valueElements.attribute("xid"); String xidValue = xidAttr.getValue(); descriptionValue = valueElements.attributeValue("description"); if (xidValue != null && xidValue.equals("0")) { System.out.println(valueElements.getText()); valueElements.detach(); } else { String newXidValue = String .valueOf(Integer.parseInt(xidValue) - 1); xidAttr.setValue(newXidValue); } } if (descriptionValue != null && !descriptionValue.equals("")) { return true; } else { return false; } } // public static void main(String[] args) { // new XMLParse().readXml(null, null); // } }