首先是一个Web项目,算是比较小的了。最近客户又要求加新功能 原本是有很多fusionchart展示的数据,用户要求可以将这些数据导出到Excel中。这些fusionchart在做的时候压根就没考虑到导出,而且用的是fusionchart-free,现在大约有50多个图表要求导出数据。展示的数据大多数都是由多条SQL拼接起来的,要是在后台导出结果集的话逻辑怕是很复杂,而且要针对每一个fusionchart单独写方法,工作量会很大。我现在的思路是能不能解析fusionchart的XML数据文件,取得数据写到Excel中。之前在做的时候XML数据文件是以String字符串的形式传到前台的,这个很容易获取。不过fusionchart的数据文件是不规则XML文件(现在就是一坨很长的字符串),我不知道该怎么解析获取其中的数据。求大神指点迷津,能给点经验或者有可参考的代码最好了 先谢谢各位了

解决方案 »

  1.   

    不规则的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节点下品牌节点
       String b = brand.getText();//得到品牌节点的值
       Attribute att = brand.attribute("hot");//得到品牌节点的属性
       String hot = att.getValue();//得到属性的值
       System.out.println("品牌:"+b+" hot: "+hot);
       Element price = good.element("价格");
       String p = price.getText();
       System.out.println("价格:"+p);
      }
      Element pad = root.element("Pad");
      Iterator iter2 = pad.elementIterator("good");
      while(iter2.hasNext()) {
       Element good = (Element) iter2.next();
       Element brand = good.element("品牌");
       String b = brand.getText();
       Attribute att = brand.attribute("hot");
       String hot = att.getValue();
       System.out.println("品牌:"+b+" hot: "+hot);
       Element price = good.element("价格");
       String p = price.getText();
       System.out.println("价格:"+p);
      }
      
     }
     public static void main(String[] args) throws IOException, DocumentException {
      
      Dom4jxml rw = new Dom4jxml();
      rw.Writer();
      rw.Reader();
     }
      

  2.   

    不规则的解析没有用到过,因为不规则所以很繁琐,一大堆代码一个一个的catch吧,你用的是fusionchart,fusionchart的图表有不同的形式,这些相同形式的图表的xml数据源应该是同种类型的吧,这样就可以分类了,导出excel就是把数据和你的标题对应,建立个复杂的对应。
      

  3.   

    好吧 我现在用正则了 
    菜鸟技术不行啊 
    <dataset seriesName='其他 '><set value='2.6' /> <set value='0.5' /> <set value='0.9' /> </dataset>
    我要截取 seriesName='其他 ' 这个 获得 ‘其他’ 有人能给我点可以参考的正则吗 谢谢