|
|
|
@ -10,17 +10,36 @@ import java.io.File;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
|
|
|
|
|
public class TestXml {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 将一个小数形式的字符串,转为保留两位小数的字符串
|
|
|
|
|
*
|
|
|
|
|
* @param v
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
public static String doubleWith2f(String v) {
|
|
|
|
|
// 保留两位小数
|
|
|
|
|
try {
|
|
|
|
|
double d = Double.parseDouble(v);
|
|
|
|
|
if (d == (int) d) {
|
|
|
|
|
v = String.valueOf((int) d);
|
|
|
|
|
} else {
|
|
|
|
|
v = String.format("%.2f", d);
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception err) {
|
|
|
|
|
//do nothing
|
|
|
|
|
}
|
|
|
|
|
return v;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void main(String[] args) throws DocumentException {
|
|
|
|
|
String xml = "D:\\dsWork\\YunNanDsBase\\src\\main\\java\\com\\dsideal\\base\\Tools\\Test\\Sample.xml";
|
|
|
|
|
//3、开始读取
|
|
|
|
|
|
|
|
|
|
// 创建 SAXReader 对象,读取 XML 文件
|
|
|
|
|
SAXReader reader = new SAXReader();
|
|
|
|
|
Document document = reader.read(new File(xml));
|
|
|
|
|
// 获取根元素
|
|
|
|
|
Element root = document.getRootElement();
|
|
|
|
|
//折线图
|
|
|
|
|
//将xml用IDEA打开,搜索关键的数据值,然后右键查看XPATH完整路径可以获取到下面的路径
|
|
|
|
|
///c:chartSpace/c:chart/c:plotArea/c:lineChart/c:ser/c:cat/c:numRef/c:numCache/c:pt/c:v
|
|
|
|
|
|
|
|
|
|
//声明一个数组,图表的所有类型
|
|
|
|
|
String[] CHART_TYPES = {"lineChart", "barChart"};//折线,柱状
|
|
|
|
@ -68,17 +87,8 @@ public class TestXml {
|
|
|
|
|
for (Element pt : yList) {
|
|
|
|
|
String idx = pt.attribute("idx").getValue();
|
|
|
|
|
String v = pt.element("v").getText();
|
|
|
|
|
// 保留两位小数
|
|
|
|
|
try {
|
|
|
|
|
double d = Double.parseDouble(v);
|
|
|
|
|
if (d == (int) d) {
|
|
|
|
|
v = String.valueOf((int) d);
|
|
|
|
|
} else {
|
|
|
|
|
v = String.format("%.2f", d);
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception err) {
|
|
|
|
|
//do nothing
|
|
|
|
|
}
|
|
|
|
|
//保留两位小数的字符串
|
|
|
|
|
v = doubleWith2f(v);
|
|
|
|
|
//是不是有效的,存在的数据,因为有的数据是未填写的
|
|
|
|
|
if (!existsMap.containsKey(idx)) {
|
|
|
|
|
existsMap.put(idx, v);
|
|
|
|
@ -96,7 +106,7 @@ public class TestXml {
|
|
|
|
|
}
|
|
|
|
|
//下面要实现行与列的转置
|
|
|
|
|
// 创建一个一维列表,用于存储转换后的列
|
|
|
|
|
List<List<String>> transposed = new ArrayList<>();
|
|
|
|
|
List<List<String>> res = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
//上面生成的数据格式需要行转列,横坐标是年份,纵坐标是数据
|
|
|
|
|
int rowCount = tList.size();// 计算行数和列数
|
|
|
|
@ -111,9 +121,9 @@ public class TestXml {
|
|
|
|
|
column.add(x);
|
|
|
|
|
}
|
|
|
|
|
// 将当前列添加到结果列表中
|
|
|
|
|
transposed.add(column);
|
|
|
|
|
res.add(column);
|
|
|
|
|
}
|
|
|
|
|
//输出转置后的数据
|
|
|
|
|
ExcelKit.printTable(transposed);
|
|
|
|
|
ExcelKit.printTable(res);
|
|
|
|
|
}
|
|
|
|
|
}
|