`

dom4j使用

    博客分类:
  • java
阅读更多

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使用详解

    DOM4J使用详解包括具体的增加、删除、获取节点、属性

    dom4j使用教程

    dom4j使用教程 感觉很好 与大家共享

    XSD使用dom4j校验XML

    XSD使用dom4j校验XML

    Dom4j使用简介

    Dom4j使用简介,日志 开发java必看,初级高级开发必看

    DOM4J jar包 xml解析 所有的dom4j-1.6.1 dom4j-2.0.2 dom4j-2.1.1包 导入直接使用

    DOM4J jar包 所有的包 xml解析 dom4j-1.6.1 dom4j-2.0.2 dom4j-2.1.1 导入直接使用

    Dom4j 使用指南.rar

    Dom4j 使用指南 对学习xml的用户有很大的帮助

    Dom4J使用手册和说明

    Dom4J使用手册和说明 ,方便有需要的人参考和使用。 Web开发,Java开发。。。。

    DOM4J使用简介(很实用)

    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使用教程+dom4j.jar

    收集于网络的dom4j解析使用,包括创建,修改,删除等并且有jar文件一同上传

    Dom4j的使用(全而好的文章)

    Dom4j的使用(全而好的文章),不看后悔哦。刚学习过,灰常好的资源。

    dom4j dom4j dom4j dom4j

    dom4j dom4j dom4j dom4j dom4j dom4j

    dom4j使用简介

    Dom4j 是一个易用的、开源的库,用于 XML,XPath 和 XSLT。它应用于 Java 平 台,采用了 Java 集合框架并完全支持 DOM,SAX 和 JAXP

    DOM4J的jar包和API

    与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。 Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4...

    Dom4j 使用简介

    Dom4j 使用简介,Dom4j 使用简介

    dom4j的使用教程

     DOM4J使用起来非常简单。只要你了解基本的XML-DOM模型,就能使用。然而他自己带的指南只有短短一页(html),不过说的到挺全。国内的中文资料很少。因而俺写这个短小的教程方便大家使用,这篇文章仅谈及基本的用法...

    dom4j使用介绍

    里面有dom4j的相关资料,还有一些dom4j的相关接口、属性和方法,需要的拿去看看吧

    dom4j-2.1.1-API文档-中英对照版.zip

    赠送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 简单教程

    本人总结的dom4j使用方法,希望能帮助刚刚接触的朋友。

Global site tag (gtag.js) - Google Analytics