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);
// }
}
分享到:
相关推荐
dom4j使用手册;
DOM4J使用详解包括具体的增加、删除、获取节点、属性
dom4j使用教程 感觉很好 与大家共享
XSD使用dom4j校验XML
Dom4j使用简介,日志 开发java必看,初级高级开发必看
DOM4J jar包 所有的包 xml解析 dom4j-1.6.1 dom4j-2.0.2 dom4j-2.1.1 导入直接使用
Dom4j 使用指南 对学习xml的用户有很大的帮助
Dom4J使用手册和说明 ,方便有需要的人参考和使用。 Web开发,Java开发。。。。
DOM4J是dom4j.org出品的一个开源XML解析包,它的网站中这样定义: Dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platform using the ...DOM4J使用起来非常简单。
收集于网络的dom4j解析使用,包括创建,修改,删除等并且有jar文件一同上传
Dom4j的使用(全而好的文章),不看后悔哦。刚学习过,灰常好的资源。
dom4j dom4j dom4j dom4j dom4j dom4j
Dom4j 是一个易用的、开源的库,用于 XML,XPath 和 XSLT。它应用于 Java 平 台,采用了 Java 集合框架并完全支持 DOM,SAX 和 JAXP
与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。 Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4...
Dom4j 使用简介,Dom4j 使用简介
DOM4J使用起来非常简单。只要你了解基本的XML-DOM模型,就能使用。然而他自己带的指南只有短短一页(html),不过说的到挺全。国内的中文资料很少。因而俺写这个短小的教程方便大家使用,这篇文章仅谈及基本的用法...
里面有dom4j的相关资料,还有一些dom4j的相关接口、属性和方法,需要的拿去看看吧
赠送jar包:dom4j-2.1.1.jar; 赠送原API文档:dom4j-2.1.1-javadoc.jar; 赠送源代码:dom4j-2.1.1-sources.jar; 赠送Maven依赖信息文件:dom4j-2.1.1.pom; 包含翻译后的API文档:dom4j-2.1.1-javadoc-API文档-...
本人总结的dom4j使用方法,希望能帮助刚刚接触的朋友。