package com.fr.data; import com.fr.base.Parameter; import com.fr.general.data.DataModel; import com.fr.script.Calculator; import com.fr.stable.ParameterProvider; import com.fr.stable.StringUtils; import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.events.XMLEvent; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.List; /** * XMLDemoTableData *
* 这是一个按参数来解析不同地址XML文件的demo *
* AbstractParameterTableData 包装了有参数数据集的基本实现
*/
public class XMLDemoTableData extends AbstractParameterTableData {
// 构造函数
public XMLDemoTableData() {
// 定义需要的参数,这里定义一个参数,参数名为filename,给其一个默认值"Northwind.xml"
this.parameters = new Parameter[1];
this.parameters[0] = new Parameter("filename", "Northwind");
}
/**
* 返回获取数据的执行对象
* 系统取数时,调用此方法来返回一个获取数据的执行对象
* 注意! 当数据集需要根据不同参数来多次取数时,此方法在一个计算过程中会被多次调用。
*/
@SuppressWarnings("unchecked")
public DataModel createDataModel(Calculator calculator) {
// 获取传进来的参数
ParameterProvider[] params = super.processParameters(calculator);
// 根据传进来的参数,等到文件的路径
String filename = null;
for (int i = 0; i < params.length; i++) {
if (params[i] == null) continue;
if ("filename".equals(params[i].getName())) {
filename = (String) params[i].getValue();
}
}
String filePath;
if (StringUtils.isBlank(filename)) {
filePath = "D://DefaultFile.xml";
} else {
filePath = "D://" + filename + ".xml";
}
// 定义需要解析的数据列,机器
// XMLColumnNameType4Demo[] columns = new XMLColumnNameType4Demo[7];
// columns[0] = new XMLColumnNameType4Demo("CustomerID", XMLParseDemoDataModel.COLUMN_TYPE_STRING);
// columns[1] = new XMLColumnNameType4Demo("CompanyName", XMLParseDemoDataModel.COLUMN_TYPE_STRING);
// columns[2] = new XMLColumnNameType4Demo("ContactName", XMLParseDemoDataModel.COLUMN_TYPE_STRING);
// columns[3] = new XMLColumnNameType4Demo("ContactTitle", XMLParseDemoDataModel.COLUMN_TYPE_STRING);
// columns[4] = new XMLColumnNameType4Demo("Address", XMLParseDemoDataModel.COLUMN_TYPE_STRING);
// columns[5] = new XMLColumnNameType4Demo("City", XMLParseDemoDataModel.COLUMN_TYPE_STRING);
// columns[6] = new XMLColumnNameType4Demo("Phone", XMLParseDemoDataModel.COLUMN_TYPE_STRING);
List list = new ArrayList();
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
InputStream in;
try {
in = new BufferedInputStream(new FileInputStream(new File(filePath)));
XMLEventReader reader = inputFactory.createXMLEventReader(in);
readCol(reader, list);
in.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
XMLColumnNameType4Demo[] columns = (XMLColumnNameType4Demo[]) list.toArray(new XMLColumnNameType4Demo[0]);
// 定义解析的数据在xml文件结构中的位置
String[] xpath = new String[2];
xpath[0] = "Northwind";
xpath[1] = "Customers";
/*
* 说明
* 提供的样例xml文件的格式是:
*