首先是一个Web项目,算是比较小的了。最近客户又要求加新功能 原本是有很多fusionchart展示的数据,用户要求可以将这些数据导出到Excel中。这些fusionchart在做的时候压根就没考虑到导出,而且用的是fusionchart-free,现在大约有50多个图表要求导出数据。展示的数据大多数都是由多条SQL拼接起来的,要是在后台导出结果集的话逻辑怕是很复杂,而且要针对每一个fusionchart单独写方法,工作量会很大。我现在的思路是能不能解析fusionchart的XML数据文件,取得数据写到Excel中。之前在做的时候XML数据文件是以String字符串的形式传到前台的,这个很容易获取。不过fusionchart的数据文件是不规则XML文件(现在就是一坨很长的字符串),我不知道该怎么解析获取其中的数据。求大神指点迷津,能给点经验或者有可参考的代码最好了 先谢谢各位了
------最佳解决方案--------------------
不规则的xml解析,很痛苦的。
public class Dom4jxml {
//写XML文件
public void Writer() throws IOException {
Document doc = DocumentHelper.createDocument();
Element goods = doc.addElement("goods");//添加根节点
Element phone = goods.addElement("Phone");//根节点下添加Phone节点
Element good1 = phone.addElement("good");//Phone节点下添加good节点
Element brand1 = good1.addElement("品牌");
brand1.setText("三星");//设置节点值
brand1.addAttribute("hot","yes");//设置节点属性
Element price1 = good1.addElement("价格");
price1.setText("3000");
Element good2 = phone.addElement("good");
Element brand2 = good2.addElement("品牌");
brand2.setText("苹果");
brand2.addAttribute("hot","yes");
Element price2 = good2.addElement("价格");
price2.setText("4000");
Element pad = goods.addElement("Pad");
Element good3 = pad.addElement("good");
Element brand3 = good3.addElement("品牌");
brand3.setText("苹果");
brand3.addAttribute("hot","yes");
Element price3 = good3.addElement("价格");
price3.setText("4500");
FileWriter fw = new FileWriter("goods.xml");
OutputFormat format = OutputFormat.createPrettyPrint();//缩减型格式
//OutputFormat format = OutputFormat.createCompactFormat();//紧凑型格式
format.setEncoding("UTF-8");//设置编码
//format.setTrimText(false);//设置text中是否要删除其中多余的空格
XMLWriter xw = new XMLWriter(fw, format);
xw.write(doc);
xw.close();
}
//读XML文件
public void Reader() throws DocumentException {
SAXReader sr = new SAXReader();
Document doc = sr.read(new File("goods.xml"));
Element root = doc.getRootElement();//得到根节点
Element phone = root.element("Phone");//得到根节点下Phone节点
Iterator iter1 = phone.elementIterator("good");//遍历Phone节点下所有good节点
while(iter1.hasNext()) {
Element good = (Element) iter1.next();
Element brand = good.element("品牌");//得到good节点下品牌节点