`
左眼的天空
  • 浏览: 30459 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

用amchart的时候遇到一个难题:将数据库里的数据生成xml

阅读更多

(mysql5.0)sql脚本

CREATE TABLE `hostdiskinfo` (
`hdid` bigint(20) NOT NULL auto_increment,
`begintime` datetime default '0000-00-00 00:00:00',
`hdiskinfo` longtext,
`hostid` bigint(20) default '0',
PRIMARY KEY (`hdid`)
) ;

这是查询结果:
mysql> select hdiskinfo,begintime from hostdiskinfo where hostid=11
+-------------------------+---------------------+
| hdiskinfo               | begintime           |
+-------------------------+---------------------+
| C:,66.4;D:,82.8;E:,80.9 | 2009-02-06 15:15:03 |
| C:,66.4;D:,82.8;E:,80.9 | 2009-02-06 15:23:45 |
| C:,66.1;D:,82.8;E:,80.9 | 2009-02-06 15:30:02 |
| C:,64.4;D:,82.8;E:,83.8 | 2009-02-09 09:37:20 |
| C:,64.4;D:,82.8;E:,83.8 | 2009-02-09 09:39:41 |
| C:,64.4;D:,82.8;E:,83.8 | 2009-02-09 09:48:23 |
| C:,64.4;D:,82.8;E:,83.8 | 2009-02-09 09:51:14 |
+-------------------------+---------------------+
7 rows in set (0.00 sec)
现在的要求是要将以上的查询结果以下面形式写入到xml文件里面:
<?xml version="1.0" encoding="UTF-8"?>
<chart>
<series>
    <value xid="0">02-06 15:15</value>
    <value xid="1">02-06 15:23</value>
    <value xid="2">02-06 15:30</value>
    <value xid="3">02-09 09:37</value>
    <value xid="4">02-09 09:39</value>
    <value xid="5">02-09 09:48</value>
    <value xid="6">02-09 09:51</value>
</series>
<graphs>
    <graph gid="1" title="C:">
      <value xid="0">66.4</value>
      <value xid="1">66.4</value>
      <value xid="2">66.1</value>
      <value xid="3">64.4</value>
      <value xid="4">64.4</value>
      <value xid="5">64.4</value>
      <value xid="6">64.4</value>
    </graph>
    <graph gid="2" title="D:">
      <value xid="0">82.8</value>
      <value xid="1">82.8</value>
      <value xid="2">82.8</value>
      <value xid="3">82.8</value>
      <value xid="4">82.8</value>
      <value xid="5">82.8</value>
      <value xid="6">82.8</value>
    </graph>
    <graph gid="3" title="E:">
      <value xid="0">80.9</value>
      <value xid="1">80.9</value>
      <value xid="2">80.9</value>
      <value xid="3">83.8</value>
      <value xid="4">83.8</value>
      <value xid="5">83.8</value>
      <value xid="6">83.8</value>
    </graph>
</graphs>
</chart>

下面是我之前的实现方法:
package org.enilu.util.amchart;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.enilu.util.db.DBConnection;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

public class AmchartDemo02 {

/**
* @param args
*/
public static void main(String[] args) {
   // TODO Auto-generated method stub
   List all = getData();
   System.out.println(all.size());
   createXML(all);
}

public static List getData() {
   Connection conn = DBConnection.getConnection("conf.properties");
   List all = new ArrayList();
   ResultSet rs = null;
   Hostdiskinfo hd = null;
   PreparedStatement pstmt = null;
   String sql = "select hdiskinfo,begintime from hostdiskinfo where hostid=11";
   try {
    pstmt = conn.prepareStatement(sql);
    rs = pstmt.executeQuery();
    while (rs.next()) {
     hd = new Hostdiskinfo();
     hd.setHdiskinfo(rs.getString(1));
     hd.setBegintime(rs.getTimestamp(2));
     System.out.println(hd.getBegintime());
     all.add(hd);
    }
   } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } finally {
    try {
     rs.close();
     pstmt.close();
     conn.close();
    } catch (SQLException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }

   }
   return all;
}

public static boolean createXML(List all) {
   Document doc = new Document();
   Element chart, series, value, graphs, ce, de, ee, fe, ge, he = null;
   ce = new Element("graph");
   de = new Element("graph");
   ee = new Element("graph");
   fe = new Element("graph");
   ge = new Element("graph");
   he = new Element("graph");
   chart = new Element("chart");
   series = new Element("series");
   graphs = new Element("graphs");

   for (int i = 0; i < all.size(); i++) {
    value = new Element("value");
    value.setAttribute("xid", i + "");
    Hostdiskinfo hd = (Hostdiskinfo) all.get(i);
    value.setText(hd.getBegintime().toString().substring(5, 16));

    series.addContent(value);
   }
   chart.addContent(series);
   Hostdiskinfo hd2 = (Hostdiskinfo) all.get(0);
   String st = hd2.getHdiskinfo();
   if (st.contains("C:")) {

    ce.setAttribute("gid", "1");
    ce.setAttribute("title", "C:");
   }
   if (st.contains("D:")) {

    de.setAttribute("gid", "2");
    de.setAttribute("title", "D:");
   }
   if (st.contains("E:")) {

    ee.setAttribute("gid", "3");
    ee.setAttribute("title", "E:");
   }
   if (st.contains("F:")) {

    fe.setAttribute("gid", "4");
    fe.setAttribute("title", "F:");
   }

   if (st.contains("G:")) {

    ge.setAttribute("gid", "5");
    ge.setAttribute("title", "G:");
   }

   if (st.contains("H:")) {

    he.setAttribute("gid", "6");
    he.setAttribute("title", "H:");
   }
   for (int a = 0; a < all.size(); a++) {
    Hostdiskinfo hd3 = (Hostdiskinfo) all.get(a);
    String[] st1 = hd3.getHdiskinfo().split(";");
    for (int b = 0; b < st1.length; b++) {
     String[] st2 = st1[b].split(",");
     value = new Element("value");
     value.setAttribute("xid", a + "");

     value.setText(st2[1]);

     if (st2[0] == "C:" || st2[0].equals("C:")) {

      ce.addContent(value);
     }
     if (st2[0] == "D:" || st2[0].equals("D:")) {
      de.addContent(value);
     }
     if (st2[0] == "E:" || st2[0].equals("E:")) {
      ee.addContent(value);
     }
     if (st2[0] == "F:" || st2[0].equals("F:")) {
      fe.addContent(value);
     }
     if (st2[0] == "G:" || st2[0].equals("G:")) {
      ge.addContent(value);
     }
     if (st2[0] == "H:" || st2[0].equals("H:")) {
      he.addContent(value);
     }

    }
   }
   if (ce.getChildren().size() > 1) {
    graphs.addContent(ce);
   }
   if (de.getChildren().size() > 1) {
    graphs.addContent(de);
   }
   graphs.addContent(ee);
   if (fe.getChildren().size() > 1) {

    graphs.addContent(fe);
   }
   if (ge.getChildren().size() > 1) {
    graphs.addContent(ge);
   }
   if (he.getChildren().size() > 1) {
    graphs.addContent(he);
   }
   chart.addContent(graphs);
   doc.addContent(chart);
   Format f = Format.getRawFormat();
   f.setEncoding("UTF-8");
   f.setIndent(" ");// 每一层元素缩排两格
   XMLOutputter XMLOut = new XMLOutputter(f);
   try {
    XMLOut.output(doc, new FileOutputStream("d:/amline_data.xml"));
    return true;
   } catch (FileNotFoundException e) {

    e.printStackTrace();
   } catch (IOException e) {

    e.printStackTrace();
   }
   return false;
}
}


我想不到其他的实现方法,本来打算在for循环里动态new graph实例,但是我做不到,不知哪位高人路过你呢个指点下^_^
效果图如下:




后来朋友给了个更好的循环方法,贴这儿^_^:

package org.enilu.util.amchart;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.enilu.util.db.DBConnection;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

public class AmchartDemo03 {


public static void main(String[] args) {

   List all = getData();

   createXML(all);
}

/**
* 从数据库里取得数据
*
* @return
*/
public static List getData() {
   Connection conn = DBConnection.getConnection("conf.properties");
   List all = new ArrayList();
   ResultSet rs = null;
   Hostdiskinfo hd = null;
   PreparedStatement pstmt = null;
   String sql = "select hdiskinfo,begintime from hostdiskinfo where hostid=11";
   try {
    pstmt = conn.prepareStatement(sql);
    rs = pstmt.executeQuery();
    while (rs.next()) {
     hd = new Hostdiskinfo();
     hd.setHdiskinfo(rs.getString(1));
     hd.setBegintime(rs.getTimestamp(2));
     System.out.println(hd.getBegintime());
     all.add(hd);
    }
   } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } finally {
    try {
     rs.close();
     pstmt.close();
     conn.close();
    } catch (SQLException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }

   }
   return all;
}

/**
* 创建数据源文件xml
*
* @param all
* @return
*/
public static boolean createXML(List all) {
   Document doc = new Document();
   Element chart, series, value, graphs, graph = null;

   chart = new Element("chart");
   series = new Element("series");
   graphs = new Element("graphs");

   for (int i = 0; i < all.size(); i++) {
    value = new Element("value");
    value.setAttribute("xid", i + "");
    Hostdiskinfo hd = (Hostdiskinfo) all.get(i);
    value.setText(hd.getBegintime().toString().substring(5, 16));

    series.addContent(value);
   }

   Hostdiskinfo hostdiskinfo = (Hostdiskinfo) all.get(0);
   String diskinfo = hostdiskinfo.getHdiskinfo();

   chart.addContent(series);

   /* 随即取出一条数据根据是否大写判断有几个磁盘,并将磁盘名称放到集合allDriver里 */
   List allDriver = new ArrayList();
   Hostdiskinfo hd2 = (Hostdiskinfo) all.get(0);
   String st = hd2.getHdiskinfo();
   for (int i = 0; i < st.length(); i++) {
    Character c = st.charAt(i);
    if (c.isUpperCase(c)) {
     allDriver.add(c);
     System.out.println(c);
    }
   }
   int driverNum = allDriver.size();

   for (int m = 0; m < driverNum; m++) {
    graph = new Element("graph");
    graph.setAttribute("gid", m + "");
    graph.setAttribute("title", allDriver.get(m) + "盘");

    for (int n = 0; n < all.size(); n++) {
     Hostdiskinfo hd = (Hostdiskinfo) all.get(n);
     String st1[] = hd.getHdiskinfo().split(";");
     String st2[] = st1[m].split(",");
     value = new Element("value");
     value.setAttribute("xid", n + "");
     value.setText(st2[1]);
     graph.addContent(value).detach();
    }
    graphs.addContent(graph);
   }

   chart.addContent(graphs);
   doc.addContent(chart);
   Format f = Format.getRawFormat();
   f.setEncoding("UTF-8");
   f.setIndent(" ");// 每一层元素缩排两格
   XMLOutputter XMLOut = new XMLOutputter(f);
   try {
    XMLOut.output(doc, new FileOutputStream("d:/amline_data.xml"));
    return true;
   } catch (FileNotFoundException e) {

    e.printStackTrace();
   } catch (IOException e) {

    e.printStackTrace();
   }
   return false;
}
}


查看在新博客http://enilu.github.io的文章地址:http://enilu.github.io/%E9%9A%8F%E6%89%8B%E8%AE%B0/2009/09/28/%E7%94%A8amchart%E7%9A%84%E6%97%B6%E5%80%99%E9%81%87%E5%88%B0%E4%B8%80%E4%B8%AA%E9%9A%BE%E9%A2%98/

 

分享到:
评论

相关推荐

    asp 生成xml文件并调用amchart画图表的实例

    根据amchart的说明文档用ASP生成XML后画图文报表的实例。 原代码在我的博客上可以参考:http://blog.csdn.net/e_zhiwen/archive/2010/11/12/6004617.aspx 这里是我的做好后的实例。

    amchart

    1. **数据准备**:首先,你需要将数据整理成XML格式。XML是一种结构化的数据交换格式,易于读写,并且跨平台兼容。在.NET中,可以使用System.Xml命名空间下的类如XmlDocument或XDocument来生成XML文件。 2. **图表...

    amChart

    `amChart` 是一个强大的数据可视化工具,专为创建交互式图表和图形而设计。它支持多种平台,包括 Web、移动应用以及 Flex 应用程序。`flex amChart` 特别是针对 Adobe Flex 开发者,提供了在 Flex 项目中集成动态...

    C#使用amchart制作漂亮的图表

    amCharts是一个流行的JavaScript图表库,但通过一些技巧,我们可以将其与C#后端集成,实现动态数据更新和各种图表类型,如饼图、柱状图、曲线图以及XY坐标图。 首先,让我们了解一下amCharts。这是一个开源的图表库...

    amchart技术说明

    以一个实时负荷曲线为例,Amchart的集成流程包括: 1. **创建SWFObject实例**:创建`amlineUnitLoad`对象,其中包含多个`SWFObject`实例,每个实例引用`amline.swf` Flash组件。 2. **配置SWFObject属性**:设置每...

    AMCHART,附带几十种示例

    2. **数据绑定**:AMCHART允许开发者将数据动态绑定到图表上,无论是JSON格式、XML格式还是其他数据源,都可以方便地与图表进行交互。示例中可能会展示如何设置数据源,以及如何处理动态更新的数据。 3. **交互功能...

    amchart使用方法

    1. **创建激活文件**:在与 `.swf` 文件相同的目录下新建一个名为 `amcharts_key.txt` 的文本文件。 2. **填写激活码**:在该文本文件中输入激活码 `"AMCHART-LNKS-1966-6679-1965-1082"`。 #### 三、Amchart 的...

    AmChart折线图例子(详细)

    在这个"AmChart折线图例子(详细)"中,我们将深入探讨如何使用AmChart创建一个详细的折线图,并通过提供的链接进一步了解实际应用。 首先,要使用AmChart,你需要在HTML文件中引入相关的JavaScript库。这通常包括`...

    amchart -5 Radar & Polar(flash chart 图表)

    **标题:“amchart -5 Radar & Polar(flash chart 图表)”** ...通过上述文件和描述,我们可以学习如何使用amchart -5库创建和自定义Radar及Polar图表,以及如何将它们集成到Web项目中,以有效地展示和分析多维度数据。

    AmChart,MSChart实例教程

    AmChart和MSChart是两种广泛使用的图表库,用于在Web应用程序中创建动态、交互式的可视化数据。本教程将深入探讨这两个库的实例应用,帮助开发者更好地理解和掌握它们的使用。 首先,AmChart是一款JavaScript图表库...

    amchart饼图 asp.net版

    2. **饼图原理**: 饼图是一种将数据以扇形划分的方式展示,每个扇区代表一个类别,扇区的大小对应类别的相对比例。通过饼图,用户可以直观地看出各类别在总数据中的占比,适用于展示有限类别之间的比较。 3. **ASP...

    AmChart中文API

    amcharts 要一个“配置文件”(setting.xml),一个数据文件(amile_data.xml), 一个 SWFObject.js,一个对应的 SWF 就可以生成漂亮的统计报表了 1 SWFObject v1.5的对象结构 view plaincopy to clipboardprint? ...

    Amchart技术说明

    总的来说,Amchart提供了一种强大的方式来创建动态、交互的图表,允许开发者通过灵活的配置文件和数据文件定制图表的每一个细节,适应各种数据分析和展示需求。通过JavaScript的集成,可以实现与后台数据的实时同步...

    可左右拖拉的web 图形控件amChart

    5. **绑定数据**:将数据与图表关联起来。 6. **初始化图表**:调用amChart的实例化方法,生成图表。 7. **添加交互事件**:如果需要,可以添加额外的交互事件,如点击事件、拖动事件等。 在实际开发中,`amChart`...

    amchart,amchart,amchart

    AmCharts 是一款强大的数据可视化...总之,AmCharts 是一个功能强大且易于使用的图表库,对于需要数据可视化的项目来说,是一个理想的选择。通过深入理解和实践,开发者可以利用其特性创建出令人印象深刻的交互式图表。

    amchart -2 Line & Area(flash chart 图表)

    **标题详解:**"amchart -2 Line & Area(flash chart 图表)" 是一个基于Flash技术的图表库,专门用于创建线形图和面积图。这个库提供了丰富的可视化功能,适用于展示时间序列数据或者比较不同类别的数据变化趋势。...

    amChart_3.14.4

    总的来说,amChart 3.14.4 是一个强大的数据可视化工具,它的转换到JSON数据格式的决策反映了Web开发的现代化趋势,提供了丰富的图表类型和高度的自定义能力,是开发人员构建动态、交互式数据图表的理想选择。

    WPF AmChart Charts 图形

    3. **配置数据源**: 将数据绑定到图表,这可以通过XML、JSON或者编程方式实现。 4. **设置图表类型和系列**: 根据需求选择图表类型(如柱状图、线图等),并定义系列(数据的分组)。 5. **自定义样式和外观**: 使用...

    AMchart flash图表控件

    综上所述,AMchart Flash图表控件是一个功能强大且灵活的工具,对于需要高质量数据可视化的开发者来说,它是一个非常有价值的资源。通过深入学习和实践,你可以充分利用它的各项特性,为你的项目增添更多亮点。

    Flex漂亮的柱状图,横坐标倾斜45度显示amChart

    3. 设置数据源:将数据绑定到图表,可以是XML、JSON或者其他数据格式。 4. 自定义配置:根据需求调整坐标轴、图例、提示框等组件的样式和行为。 5. 添加到舞台:将图表添加到应用的显示列表中。 压缩包中的`charts`...

Global site tag (gtag.js) - Google Analytics