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 是一个强大的 Java 库,专为处理 XML 文档而设计。它提供了丰富的 API,使得在 Java 中解析、创建、修改 XML 文件变得简单高效。DOM4J 不仅支持 DOM(文档对象模型)和 SAX(简单API for ...
### 四、DOM4J查询XML 1. **XPath查询**: DOM4J支持XPath表达式进行复杂查询。首先,需要创建`XPath`对象,并使用`compile()`方法编译XPath字符串,然后调用`evaluate()`方法执行查询。 ```java XPath xpath = ...
**DOM4J使用与JAR包** DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了丰富的API,使得XML的读取、创建、修改和解析变得异常简便。在这个主题中,我们将深入探讨DOM4J的核心功能以及如何在Java项目中使用...
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了一种灵活且高效的方式来解析、创建、修改和操作XML文档。DOM4J不仅支持DOM模型,还支持SAX和JAXP解析器,使得开发者可以根据需要选择不同的解析策略。 1. ...
**Dom4j 使用指南** Dom4j 是一个非常流行的Java库,用于处理XML文档。它提供了灵活、高效的方式来解析、创建、操作XML内容。对于学习XML的开发者来说,Dom4j是一个不可多得的工具,因为它的API简洁易用,功能强大...
### DOM4j 使用详解 #### 一、简介 DOM4j是一种用于处理XML文档的Java库,它提供了灵活且高效的方式来解析、修改和创建XML文件。相比于标准的DOM和SAX API,DOM4j提供了更加简洁易用的API,使得开发者能够更轻松地...
1. 加载XSD文件:使用DOM4J的DocumentHelper类的parse方法,传入XSD文件的路径,得到一个SchemaFactory对象。 ```java SchemaFactory schemaFactory = DocumentHelper.createSchema(new File("path_to_xsd_file.xsd...
#### 四、DOM4J 的应用场景 DOM4J因其出色的性能和灵活性,被广泛应用于各种场景中,包括但不限于: - **Web服务**:在构建RESTful Web服务时,DOM4J可用于解析和生成XML响应。 - **配置管理**:许多软件系统使用...
在项目中使用DOM4J时,只需将相应的jar包(如dom4j-1.6.1.jar、dom4j-2.0.2.jar或dom4j-2.1.1.jar)导入到类路径中,即可开始利用其功能处理XML文档。导入后,可以按照DOM4J提供的API进行编程,快速实现XML的读写...
要使用DOM4J的XPath功能,首先需要引入DOM4J库和JAXP(Java API for XML Processing),后者提供了XPath的实现。在Java项目中,这通常通过添加对应的依赖完成。例如,在Maven项目中,可以在pom.xml文件中加入以下...
Dom4j使用简介,日志 开发java必看,初级高级开发必看
下面将详细讲解DOM4J的主要特性和使用方法。 ### 1. DOM4J的基本概念 - **Document**: XML文档的根节点,表示整个XML结构。 - **Element**: 表示XML文档中的元素,每个元素都有一个标签名,可以包含属性和子元素。...
DOM4J 的使用 DOM4J 是一个开源的 XML 解析包,由 dom4j.org 出品,应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM、SAX 和 JAXP。DOM4J 的主要特点是使用大量的接口,所有主要接口都在 org.dom4j 里面定义...