JSChart读入图案文件时出错XML文件

如何使HashMap一个key对应多个value?
最近在做图表统计的时候,将数据存储在XML文件中。于是需要在后台处理好数据后再创建一个XML文件。由于s图表工具需要XML文件格式大体相同,所以以饼状图为例有:一个根节点,再有处于同一级的dataset 、colorset、optionset。
我的思路是创建一个方法,参数为,传入dataset 、optionset节点下的属性值,第一个属性值作为的key,第二个属性值作为value。Colorset只有一个属性值,因此可用ArrayList来接收值。
要生成的目标XML文件:
&?xml version=&1.0&?&
&dataset type=&pie&&
&data unit=&A& value=&40&/&
&data unit=&B& value=&16&/&
&data unit=&C& value=&20&/&
&data unit=&D& value=&10&/&
&/dataset&
&colorset&
&color value=&#99CDFB&/&
&color value=&#3366FB&/&
&color value=&#F89900&/&
&color value=&#F76600&/&
&/colorset&
&optionset&
&option set=&setSize& value=&600, 300&/&
&option set=&setTitle& value=&'Phd Reference Chart'&/&
&option set=&setTitleFontFamily& value=&'Times New Roman'&/&
&option set=&setTitleFontSize& value=&14&/&
&option set=&setShowXValues& value=&false&/&
&option set=&setLegend& value=&'#99CDFB', 'Papers where authors found'&/&
&option set=&setLegend& value=&'#3366FB', 'Papers which cite from other articles'&/&
&option set=&setLegend& value=&'#0000FA', 'Papers which cite from news'&/&
&option set=&setLegend& value=&'#F76600', 'Papers with useful information'&/&
&option set=&setLegendShow& value=&true&/&
&option set=&setLegendFontFamily& value=&'Times New Roman'&/&
&option set=&setLegendFontSize& value=&10&/&
&option set=&setLegendPosition& value=&350, 120&/&
&/optionset&
&/JSChart&
Java使用XmlPull创建XML文件示例代码:
public static void createJSChartsXml(HashMap&String, String& datas,ArrayList&String& colors,HashMap&String, String& options) throws Exception{
XmlSerializer serializer = new KXmlSerializer();
serializer.setOutput(new FileOutputStream(new File(&D:\\data.xml&)),&utf-8&);
serializer.startDocument(null, true);
serializer.startTag(null, &JSChart&);
serializer.startTag(null, &dataset&);
serializer.attribute(null, &type&, &pie&);
Iterator&String& iterator = datas.keySet().iterator();
while(iterator.hasNext()){
String key = iterator.next();
serializer.startTag(null, &data&);
serializer.attribute(null, &unit&, key);
serializer.attribute(null, &value&,datas.get(key));
serializer.endTag(null, &data&);
serializer.endTag(null, &dataset&);
serializer.startTag(null, &colorset&);
for(String color : colors){
serializer.startTag(null, &color&);
serializer.attribute(null, &value&, color);
serializer.endTag(null, &color&);
serializer.endTag(null, &colorset&);
serializer.startTag(null, &optionset&);
Iterator&String& op_iterator = options.keySet().iterator();
while(op_iterator.hasNext()){
String op_key = op_iterator.next();
serializer.startTag(null, &option&);
serializer.attribute(null, &set&, op_key);
serializer.attribute(null, &value&,options.get(op_key));
serializer.endTag(null, &option&);
serializer.endTag(null, &optionset&);
serializer.endTag(null, &JSChart&);
serializer.endDocument();
这段代码在创建的时候由于的key不能重复,所以导致生成下面四句的时候变成只有一句,因为后面三个value都被覆盖了。
&option set=&setLegend& value=&'#99CDFB', 'Papers where authors found'&/&
&option set=&setLegend& value=&'#3366FB', 'Papers which cite from other articles'&/&
&option set=&setLegend& value=&'#0000FA', 'Papers which cite from news'&/&
&option set=&setLegend& value=&'#F76600', 'Papers with useful information'&/&
为保证正确生成XML需要对代码进行部分修改,将value类型改为字符串数组即可解决:
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import org.kxml2.io.KXmlSerializer;
import org.xmlpull.v1.XmlSerializer;
public class XmlTools {
* 创建JSCharts xml文件
* @author ShelWee
* @param datas key为unit的值,value为value的值
* @param colors
* @param options key为set的值,value为value的值
* @throws Exception
public static void createJSChartsXml(HashMap&String, String& datas,ArrayList&String& colors,HashMap&String, String[]& options) throws Exception{
XmlSerializer serializer = new KXmlSerializer();
serializer.setOutput(new FileOutputStream(new File(&D:\\data.xml&)),&utf-8&);
serializer.startDocument(null, true);
serializer.startTag(null, &JSChart&);
serializer.startTag(null, &dataset&);
serializer.attribute(null, &type&, &pie&);
Iterator&String& iterator = datas.keySet().iterator();
while(iterator.hasNext()){
String key = iterator.next();
serializer.startTag(null, &data&);
serializer.attribute(null, &unit&, key);
serializer.attribute(null, &value&,datas.get(key));
serializer.endTag(null, &data&);
serializer.endTag(null, &dataset&);
serializer.startTag(null, &colorset&);
for(String color : colors){
serializer.startTag(null, &color&);
serializer.attribute(null, &value&, color);
serializer.endTag(null, &color&);
serializer.endTag(null, &colorset&);
serializer.startTag(null, &optionset&);
Iterator&String& op_iterator = options.keySet().iterator();
while(op_iterator.hasNext()){
String op_key = op_iterator.next();
String[] values = options.get(op_key);
for(String op_value:values){
serializer.startTag(null, &option&);
serializer.attribute(null, &set&, op_key);
serializer.attribute(null, &value&,op_value);
serializer.endTag(null, &option&);
serializer.endTag(null, &optionset&);
serializer.endTag(null, &JSChart&);
serializer.endDocument();
* 调用示例
* @param args
public static void main(String[] args) {
HashMap&String, String& hashMap = new HashMap&String, String&();
hashMap.put(&A&, &40&);
hashMap.put(&B&, &16&);
hashMap.put(&C&, &20&);
hashMap.put(&D&, &10&);
hashMap.put(&E&, &10&);
hashMap.put(&F&, &4&);
ArrayList&String& colors = new ArrayList&String&();
colors.add(&#99CDFB&);
colors.add(&#3366FB&);
colors.add(&#0000FA&);
colors.add(&#F8CC00&);
colors.add(&#F89900&);
colors.add(&#F76600&);
HashMap&String, String[]& options = new HashMap&String, String[]&();
options.put(&setSize&,new String[]{&600, 300&});
options.put(&setTitle&, new String[]{&'XML自动创建图表'&});
options.put(&setTitleFontFamily&, new String[]{&'Times New Roman'&});
options.put(&setTitleFontSize&, new String[]{&14&});
options.put(&setTitleColor&, new String[]{&'#0F0F0F'&});
options.put(&setPieRadius&,new String[]{ &95&});
options.put(&setPieValuesColor&, new String[]{&'#FFFFFF'&});
options.put(&setPieValuesFontSize&,new String[]{ &9&});
options.put(&setPiePosition&, new String[]{&180, 165&});
options.put(&setShowXValues&, new String[]{&false&});
options.put(&setLegend&, new String[]{&'#99CDFB', 'Papers where authors found'&,&'#3366FB', 'Papers which cite from other articles'&,
&'#0000FA', 'Papers which cite from news'&,&'#F8CC00', 'Papers which lack crucial'&,&'#F89900', 'Papers with different conclusion'&,
&'#F76600', 'Papers with useful information'&});
options.put(&setLegendShow&, new String[]{&true&});
options.put(&setLegendFontFamily&,new String[]{ &'Times New Roman'&});
options.put(&setLegendFontSize&,new String[]{ &10&});
options.put(&setLegendPosition&,new String[]{ &350, 120&});
options.put(&setPieAngle&,new String[]{ &30&});
options.put(&set3D&, new String[]{&true&});
try {
createJSChartsXml(hashMap, colors, options);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
本文由 ShelWee 于 日 发布在
分类下,您可以在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明:新主题诞生记
最近在做图表统计的时候,将数据存储在XML文件中。于是需要在后台处理好数据后再创建一个XML文件。由于JSCharts图表工具需要XML文件格式大体相同,所以以饼状图为例有:一个JSChart根节点,再有处于同一级的dataset 、colorset、optionset。
我的思路是创建一个方法,参数为HashMap,传入dataset 、optionset节点下的属性值,第一个属性值作为HashMap&&&确实很pp,也很容易使用,可惜不支持鼠标事件,只能用来展示结果,而不能交互。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:329029次
积分:4394
积分:4394
排名:第2724名
原创:59篇
转载:35篇
评论:43条
(7)(1)(3)(1)(2)(4)(9)(9)(4)(12)(45)(17)(10)(16)(1)(1)(3)(1)(10)(2)(1)(1)(3)java txt转xml,急急急!_百度知道
java txt转xml,急急急!
230&luxury/&&&#47这是我的txt//&justonline_cn-t_xu48/data unit=&luxury&#47,很急;JSChart&其中xml中value的值是txt中每行最后的数据;
&/luxury&#47,小弟在线等; value=&&dataset type=&&#47,希望大家帮忙解决一下;gainreel_com-mei_ti_nei_yi10xml格式;JSChart&jjlg_com_cn-ji_chu_ying_yang179/data unit=&1&&&//50&luxury//blue&line&/ value=&/luxury/
&dataset&gt:&gongyang_com-zhen_pi_ban_xie17/2& id=&justonline_cn-wai_tao48&#47
提问者采纳
private static String createXMLString(Object[] values){
Document doc = DocumentHelper.createDocument().String&unit&
doc1.length()){/取出每行最后的数据(正则表达式匹配)
Matcher m = Pattern.io,m.out.append(xml);).close().dom4j.add(doc1);
String regex = &
blue&quot.println(xmlStr).dom4j;i++){
Element doc1_1 = new DOMElement(&quot.setXMLEncoding(&txt的文件路径
String pathXML = &quot:\gbk&quot.L);import org.DOME或者value =
for(int i=0.addElement(&
writer = new PrintWriter(file);&#47.toArray();
} catch (IOException e) {
S.println(&/E;
} &#47.xml&能找到数字且是该行的末尾
String value =
while((s = reader.M);&#92.toString());); private static void createXMLFile(String xml.&#47.文件读取失败&().io.
Element doc1 = new DOMElement(&String&gt.InputStreamReader.end()).start().BufferedR
PrintW;&#47.PrintWriter,String filePath){
File file = new File(filePath);import java.FileNotFoundE将要生成的xml的文件路径
String xmlStr = createXMLString(getValues(pathTXT)).end()==s.E**
* 获得txt中文件每行末尾数据组(一个数组)
doc1_1;&#47,但还没有写入到文件
private static Object[] getValues(String path){
List&lt.regex.group().io!= null){
/data&quot.
* 在filePath路径下生成xml文件
* *&#47.add(value):&#92.DocumentHelper.setAttributeValue(&quot.Fi& }
if(m.add(doc1_1););
Element root = doc.find() &&;);
&#47.printStackTrace().asXML();import java.
writer.;;import java.dom4j;
doc1;\
System.Dimport java, values[i];line&value&quot.util:package XMLD;import java.addAttribute(&quot.
doc1_1;);E.ArrayList.setAttributeValue(&quot, &quot.matcher(s);/**
* 生成xml的内容.IOE&quot.FileInputStream.P
return doc.substring(m,pathXML);id&type&quot.dom4j;
pile(regex); }
&#47.addAttribute(&dataset&quot,返回字符串;[0-9]+&public class Test { public static void main(String[] args) throws IOException {
String pathTXT = &JSChart&quot.txt&quot. list = new ArrayList&lt, i+1+&.io, &
} catch (FileNotFoundException e) {
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(new File(path)))),不知道是否符合要求;&#47.printStackTrace();import java.readLine()) 写了个小的例子
非常感谢,我还有一点问题,能告诉我如何按照unit属性从1到7循环出7个标签吗?麻烦你了!!!
首先,txt只有5行,要7个标签就要提供7个“value”值,xml的unit数量是根据value的多少决定的 看不太懂“unit属性从1到7”??你是说生成xml之后嘛??再去读取&dataset type=&line& id=&blue&& 里面的7个记录?? 还是没生成xml的内容(字符串)之前?
我把具体的要求说一下吧,txt我只给出了一小部分,unit对应的是txt中的哪一行,value对应的是当前行后面的数字,之前你的程序我运行了一下,效果很好,所以想继续扩展,只是正则表达式有点问题,没有取到对应的数据,如果方便的话,请你帮我完善这个程序好吗?我第一次弄xml,还有很多不懂的问题,谢谢你了!
我运行出来的效果,不是已经能对应txt上的了吗?而且也是从1到5循环出5个标签啊,正则表达式是匹配那个数字而已。你是不是还想读取xml的内容,然后把data&unit=1&value=48这些值逐个读取出来啊?如果要读取xml,就得解析xml文件,xml我也是学习当中。。。
提问者评价
谢谢你的耐心解答,好详细呀
其他类似问题
java的相关知识
按默认排序
其他3条回答
你怎么得到这个txt的?
jar包运行出来的,怎么了?问题可以解决吗
什么jar运行得出这种玩意儿。要是你自己写的,直接序列化对象不就完了
这是什么应用哦,没看过这种格式呢是不是自己手动来解析txt要好点呢?
你到网上搜一搜Jacob.jar的这个包,应该可以转换的
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁jsCharts 用法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
喜欢此文档的还喜欢
jsCharts 用法
J​s​C​h​a​r​t​s​ ​(​j​s​制​作​各​种​统​计​图​的​所​有​属​性​)
阅读已结束,如果下载本文需要使用
想免费下载本文?
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢

我要回帖

更多关于 jschart 的文章

 

随机推荐