import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.util.Date;
import java.util.List;
import org.apache.log4j.Logger;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
public class RefreshResearchReportJob {
private static final Logger logger = Logger
.getLogger(RefreshResearchReportJob.class);
public static final String ANNEX_FOLDER = "annexFolder";
// private String startDateStr;
private ResearchReportCenterDbService researchReportService;
private ResearchReportCache researchReportCache;
// public String getStartDateStr() {
// return startDateStr;
// }
//
// public void setStartDateStr(String startDateStr) {
// this.startDateStr = startDateStr;
// }
public ResearchReportCenterDbService getResearchReportService() {
return researchReportService;
}
public void setResearchReportService(
ResearchReportCenterDbService researchReportService) {
this.researchReportService = researchReportService;
}
public ResearchReportCache getResearchReportCache() {
return researchReportCache;
}
public void setResearchReportCache(ResearchReportCache researchReportCache) {
this.researchReportCache = researchReportCache;
}
public void runJob() {
logger.info("增量更新附件启动----日期xxxx");
//获取项目根目录的绝对路径
String rootPath = "";
String classPath = RefreshResearchReportJob.class.getResource("/../..")+"";
rootPath = classPath.substring(classPath.indexOf("D:"));
rootPath = rootPath.replace("/", "\\");
long startMillis = System.currentTimeMillis();
String currentTime = CalendarUtil.getCurrentTime();
long lastReportId = 0;
// 首先判断datas.xml文件是否存在,不存在则创建
String xmlFilePath = rootPath + "\\reports" + "\\" + ANNEX_FOLDER;
FileUtil.createFolder(xmlFilePath);
String filePath = xmlFilePath + "\\" + ResearchReportAnnex.DATAS_XML;
SAXBuilder builder = new SAXBuilder(false);
Document document = null;
Element rootElement = null;
try {
File xmlFile = new File(filePath);
if (xmlFile.exists()) {
document = builder.build(filePath);
// 读取datas.xml文件,取出last-report-id作为参数去执行第一次查询
rootElement = document.getRootElement();
Element headElement = rootElement.getChild("head");
lastReportId = Long.parseLong(headElement.getChild(
"last-report-id").getText());
} else {
document = createDocument();
XMLOutputter XMLOut = new XMLOutputter(FormatXML());
try {
XMLOut.output(document, new FileOutputStream(filePath));
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
}
Date startDate = CalendarUtil.transToDate("2011-01-05");
Date endDate = CalendarUtil.transToDate("2011-01-05");
// 第一次查询出数据量较小的字段,放到内存中
List<ResearchReport> reportWithAnnexList = researchReportService
.getReportsWithAnnexes(startDate, endDate, lastReportId);
for (int i = 0; i < reportWithAnnexList.size(); i++) {
ResearchReport researchReport = reportWithAnnexList.get(i);
// 放入缓存中
researchReportCache.addResearchReport(researchReport);
// 如果有附件,就创建相应的文件夹
long reportId = researchReport.getId();
String pubDateStr = CalendarUtil.getDateStr(researchReport
.getPubDate());
String annexPath = rootPath + "\\" + ANNEX_FOLDER+ "\\"
+ pubDateStr + "\\" + reportId;
List<ResearchReportBlob> reportBlobList = researchReportService
.getReportBlobs(reportId);
for (int j = 0; j < reportBlobList.size(); j++) {
ResearchReportBlob reportBlob = reportBlobList.get(j);
FileUtil.createFolder(annexPath);
createAnnexFile(reportBlob, annexPath);
// 如果有研究报告摘要就创建html文件展示
createHtmlFile(reportBlob, annexPath);
// 把记录存到datas.xml文件中
writeDatasXml(researchReport, document, filePath);
}
}
System.out.println((System.currentTimeMillis() - startMillis) / 1000
+ "s");
}
public Format FormatXML() {
// 格式化生成的xml文件,如果不进行格式化的话,生成的xml文件将会是很长的一行...
Format format = Format.getCompactFormat();
format.setEncoding("GBK");
format.setIndent(" ");
return format;
}
public void writeDatasXml(ResearchReport researchReport, Document document,
String filePath) {
String currentTime = CalendarUtil.getCurrentTime();
long reportId = researchReport.getId();
FileOutputStream fo = null;
try {
Element rootElement = document.getRootElement();
// 操作reports的子标签
Element reportsElement = rootElement.getChild("reports");
List<Element> reportList = reportsElement.getChildren();
for (int i = 0; i < reportList.size(); i++) {
Element reportElement = reportList.get(i);
Element reportIdElement = reportElement.getChild("id");
String existReportId = reportIdElement.getText();
if(existReportId.equals(reportId+"")){
return;
}
}
Element reportElement = addReportElement(reportsElement,
researchReport);
// 操作head的子标签
Element headElement = rootElement.getChild("head");
setHeadElement(headElement, currentTime, reportId);
XMLOutputter outp = new XMLOutputter(FormatXML());
fo = new FileOutputStream(filePath);
outp.output(document, fo);
} catch (Exception e) {
e.printStackTrace();
} finally{
if(fo != null){
try {
fo.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private Document createDocument() {
Element rootElement = new Element("report-catalog");
Document document = new Document(rootElement);
addHeadElement(rootElement);
XmlUtil.addChildElement(rootElement, "reports");
return document;
}
private Element addHeadElement(Element rootElement) {
Element headElement = XmlUtil.addChildElement(rootElement, "head");
String currentTime = CalendarUtil.getCurrentTime();
XmlUtil.addChildElement(headElement, "count", "0");
XmlUtil.addChildElement(headElement, "last-report-id", "0");
XmlUtil.addChildElement(headElement, "create-time", currentTime);
XmlUtil.addChildElement(headElement, "update-time", currentTime);
return headElement;
}
private void setHeadElement(Element headElement, String currentTime,
long reportId) {
Element lastReportId = headElement.getChild("last-report-id");
lastReportId.setText(reportId + "");
Element count = headElement.getChild("count");
int countValue = Integer.parseInt(count.getText()) + 1;
count.setText(countValue + "");
Element updateTime = headElement.getChild("update-time");
updateTime.setText(currentTime);
}
private Element addReportElement(Element reportsElement,
ResearchReport report) {
Element reportElement = XmlUtil.addChildElement(reportsElement,
"report");
XmlUtil.addChildElement(reportElement, "id", report.getId().toString());
XmlUtil.addChildElement(reportElement, "title", report.getReportTitle());
XmlUtil.addChildElement(reportElement, "authors", report.getAuthors());
XmlUtil.addChildElement(reportElement, "level", report.getReportLevel()
.toString());
XmlUtil.addChildElement(reportElement, "pub-date",
CalendarUtil.getDateStr(report.getPubDate()));
XmlUtil.addChildElement(reportElement, "writing-date",
CalendarUtil.getDateStr(report.getWritingDate()));
if (report.getAnnexes() != null && report.getAnnexes().size() > 0) {
Element annexesElement = XmlUtil.addChildElement(reportElement,
"annexes");
for (ResearchReportAnnex annex : report.getAnnexes()) {
addAnnexElement(annexesElement, annex);
}
}
return reportElement;
}
private void addAnnexElement(Element annexesElement,
ResearchReportAnnex annex) {
Element annexElement = XmlUtil.addChildElement(annexesElement, "annex");
XmlUtil.addChildElement(annexElement, "id", annex.getId() + "");
XmlUtil.addChildElement(annexElement, "name", annex.getAnnexName());
}
public void createAnnexFile(ResearchReportBlob reportBlob, String annxePath) {
FileOutputStream fos;
try {
fos = new FileOutputStream(annxePath + "\\" + reportBlob.getId()
+ reportBlob.getAnnexFormat());
fos.write(reportBlob.getAnnexContent());
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void createHtmlFile(ResearchReportBlob reportBlob, String path) {
String reportAbstract = reportBlob.getAbstractContent();
if (reportAbstract != null && !"".equals(reportAbstract)) {
FileUtil.createHtmlFile(path, reportBlob.getId() + "",
reportAbstract);
}
}
}
分享到:
相关推荐
我们为什么要在LabVIEW中使用XML文件?...附件中的程序是用LabVIEW8.5开发的,其中包含了一份Sample.xml文件,供大家测试。 本程序是调用MSXML4.0接口来完成的,如果你系统里没有安装,那么将不能运行该程序。
在这里,你需要配置XML文件的位置,指定XML文件的根节点和需要提取的元素。Kettle支持XPath表达式,可以精确地定位到XML文档的特定部分。 接下来,为了将XML数据转换为表格,我们需要使用“表输出”步骤。这一步将...
1. 创建XML文件:定义简历的结构,如`<name>`、`<education>`、`<experience>`等元素。 2. 编写CSS文件:设定样式规则,定义各元素的显示方式。 3. 编写XSL文件:定义转换规则,将XML转换为HTML或者其他格式。 4. ...
资源名称:使用Javascript解析xml文件或xml格式字符串 中文WORD版 内容简介: 本文档主要讲述的是使用Javascript解析xml文件或xml格式字符串;javascript中,不论是解析xml文件,...
首先,我们要明确的是,用友NC 57凭证XML文件是一种数据交换格式,用于在不同系统间传输和导入财务凭证数据。XML(eXtensible Markup Language)是一种结构化语言,具有良好的可读性和可扩展性,非常适合用于数据...
4. 写入XML:若要将已发送或接收的邮件信息保存到XML文件,可以创建新的XML文档结构,或者基于现有结构添加新节点。使用XmlElement的AppendChild方法可添加子节点,设置节点属性并保存更改。 5. 邮件发送流程: - ...
首先,让我们看看Java如何处理XML文件。XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,它具有良好的结构和可读性。在Java中,我们通常使用DOM(Document Object Model)和SAX(Simple API ...
5. 按照指定格式在excel中编写测试用例(格式与第4点中转换得到的excel格式一致即可),使用上述工具将excel转换成符合testlink规范的xml文件,然后再将xml文件导入到testlink的指定套件下即可(以导入测试用例的形式...
xml 与 bean 互相转换 工具类 1、bean类的属性需要遵守BEAN规范,否则 无法 读存BEAN值。 2、bean类的属性如果 是集合 只支持数组以及List、Map、Set。...源代码包及详细使用文档后续整理,欢迎使用和测试本工具包。
2、附件中提供了一个名为SpyBase的Excel文件,其中包含Alias、Mission和Spy三张数据表,请分别完成下列任务: ①.使用一个XML文档(SpyBase1.xml)来描述其中包含的所有信息,基本保持原有数据的形式(不要将三个表...
这些工具可以帮助你验证XML文件的语法,查找错误,甚至进行复杂的查询和转换。例如,使用XPath(XML Path Language)可以方便地在XML文档中查找特定的数据。 8. **XML基础** 了解XML的基本结构非常重要。XML文档由...
本文档通过一个具体的示例介绍了如何使用Java语言来生成XML文件,并对代码进行了详细的解析。 #### 二、核心库与依赖 本示例使用了`org.jdom`库来处理XML的生成。JDOM(Java Document Object Model)是一个用于...
· 存储的数据中可能包括一个或者多个的文件附件,如:word文档; · 存储的数据可能被不同的平台使用,如:windows或者linux; · 作为web项目的一部分,除了提供VC的接口之外,存储的数据格式需要提供java的接口...
本文将深入探讨如何在iPhone和iPad应用中处理XML文件,以"XMLDemo"为例,来讲解相关技术。 首先,XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在数据交换、配置文件等领域。它的结构清晰...
例如,可以使用`Load`方法加载XML文件,然后通过`SelectNodes`或`SelectSingleNode`查询XML节点。 3. **XmlNode类**:表示XML文档中的任何节点,如元素、属性、文本等。可以对这些节点进行操作,如修改、添加、删除...
在“SQLXML_Sample”中,XML文件(如BTCAL.xml)可能包含一系列博客文章的元数据和附件信息。使用XML Schema(如BTCAL.xsd)可以定义XML文档的结构和约束,确保数据的有效性。xsd文件是XML Schema文档,它定义了XML...
2、附件中提供了一个名为SpyBase的Excel文件,其中包含Alias(间谍使用的别名)、Mission(间谍执行的任务)和Spy(间谍信息)三张数据表,请完成下列任务: 使用一个XML文档(SpyBase1.xml)来描述其中包含的所有...
通过使用 DataSet,可以将 XML 文件读取到 DataSet 中,然后使用 DataSet 的方法来操作数据,最后将数据写回到 XML 文件中。 程序详解: 1. XML 文件内容 XML 文件的内容可以是任何格式的,但在这里,我们使用的 ...
XML 中是可以存储图片等二进制内容,我们也常常这样做,比如我们在进行网站信息交换时,利用一个 XML 就可以实现网站信息及其信息附件的交换。实际图片等二进制不仅可转换存储在 XML 中,也可存储在 TXT 文档中,...
解释如何使用DOM、XPath和LINQ to XML提取数据;验证特定用于处理大文档的编程技术;详细描述如何展示不同系统使用的数据;演示一个用于出版业的实际的XML p 资源太大,传百度网盘了,链接在附件中,有需要的同学...