由于之前页面用的是ajax请求数据,后来想在页面再添加一个表格数据的时候也打算继续用这种方式:ajax提交后台组长xml数据返回,回调函数中用js解析xml生成表格。困惑来了,组装xml的时候本来我是这么做的:用一个StringBuilder然后一个一个节点在后面追加。最后用PrinterWriter将这个StringBuilder对象输出。写完之后觉得页面比较乱,如下,代码具体内容大伙不必关注,只看下大致情形即可:
StringBuilder baseinfo = new StringBuilder("<?xml version='1.0' encoding='gb2312'?>"); baseinfo.append("<totaltable>"); baseinfo.append("<basetable>"); //cpu使用信息 baseinfo.append("<baseinfo name='CPU'>"); baseinfo.append("<total>"+host.getCpufreq()+"</total>"); double totalcpu = Double.parseDouble(host.getCpufreq().replace("G Hz", "")); double used = totalcpu*(Double.parseDouble(winbase.getCpuusage())/100); baseinfo.append("<used>"+nbf.format(used)+"GHz</used>"); baseinfo.append("<usedpercent>"+winbase.getCpuusage()+"%</usedpercent>"); baseinfo.append("</baseinfo>"); //物理内存占用信息 baseinfo.append("<baseinfo name='内存'>"); baseinfo.append("<total>"+host.getTotalmem()+"</total>"); double memused = (Double.parseDouble(winbase.getTotalphys())-(Double.parseDouble(winbase.getAvailphys()))); nbf.setMaximumFractionDigits(2);//设置最大保留两位小数 baseinfo.append("<used>"+nbf.format(memused/(1024*1024))+"MB</used>"); baseinfo.append("<usedpercent>"+winbase.getMemoryload()+"%</usedpercent>"); baseinfo.append("</baseinfo>"); //虚拟内存信息 double totalvirtual = Double.parseDouble(winbase.getTotalvirtual()); baseinfo.append("<baseinfo name='交换空间'>"); baseinfo.append("<total>"+nbf.format(totalvirtual/1024/1024)+"MB</total>"); double swapused = Double.parseDouble(winbase.getTotalvirtual())-(Double.parseDouble(winbase.getAvailvirtual())); baseinfo.append("<used>"+nbf.format(swapused/1024/1024)+"MB</used>"); baseinfo.append("<usedpercent>"+ nbf.format(swapused/totalvirtual)+"%</usedpercent>"); baseinfo.append("</baseinfo>"); baseinfo.append("</basetable>"); //磁盘使用率信息 baseinfo.append("<disktable>"); Hostdiskinfo disk = (Hostdiskinfo) disks.get(0); String[] diskinfos = disk.getHdiskinfo().split(";"); for(int i=0;i<diskinfos.length;i++){ String tmp[] = diskinfos[i].split(","); double diskused = Double.parseDouble(tmp[1]); double free = 100.0-diskused; baseinfo.append("<disk name='"+tmp[0]+"'>"); baseinfo.append("<used>"+nbf.format(diskused)+"%</used>"); baseinfo.append("<free>"+nbf.format(free)+"%</free>"); baseinfo.append("<level>"+(diskused>70.0?"磁盘空间紧张":"磁盘空间富足")+"</level>"); baseinfo.append("</disk>"); } baseinfo.append("</disktable>"); baseinfo.append("</totaltable>");
最后生成的xml文件格式如下:
<?xml version='1.0' encoding='gb2312'?> <totaltable> <basetable> <baseinfo name='CPU'> <total>1.6G Hz</total> <used>0.083GHz</used> <usedpercent>5.2%</usedpercent> </baseinfo> <baseinfo name='内存'> <total>2038MB</total> <used>1,304.57MB</used> <usedpercent>64%</usedpercent> </baseinfo> <baseinfo name='交换空间'> <total>2,047.88MB</total> <used>157.79MB</used> <usedpercent>0.08%</usedpercent> </baseinfo> </basetable> <disktable> <disk name='C:'> <used>40.2%</used> <free>59.8%</free> <level>磁盘空间富足</level> </disk> <disk name='D:'> <used>87.6%</used> <free>12.4%</free> <level>磁盘空间紧张</level> </disk> <disk name='E:'> <used>67.4%</used> <free>32.6%</free> <level>磁盘空间富足</level> </disk> <disk name='F:'> <used>58.2%</used> <free>41.8%</free> <level>磁盘空间富足</level> </disk> </disktable> </totaltable>
今天看到别人用extjs的时候用到xstream直接将java对象转换为xml数据,就想这里是否也可以这样用;
首先上面这个xml中的数据不是一个类中获得的,那么肯定需要在根据该xml数据格式再定义一个java bean,然后根据业务逻辑将合适的值设置到这个java bean中,再转换。 不知道这么做有没有必要?因为看这满眼的sbinfo.append(".....")感觉很乱。
不知道大伙一般做类似的工作的时候,是直接手动组装xml呢,还是用类似XStream这样的直接将java bean转换为xml的工具,如果都有的,那么使用各自不同的方法的依据是什么。
查看在新博客http://enilu.github.io的文章地址:http://enilu.github.io/%E9%9A%8F%E6%89%8B%E8%AE%B0/2009/10/27/java%E7%94%9F%E6%88%90xml%E6%95%B0%E6%8D%AE%E7%9A%84%E4%B8%80%E7%82%B9%E5%9B%B0%E6%83%91/
相关推荐
无论是在使用高级编程语言(例如XSLT)还是底层的Java编程时,都需要首先读取XML文件并从中提取相关信息。解析器的主要任务是读取XML文档,解释其语法结构,并将其转化为有意义的对象供应用程序使用。此外,解析器还...
在Android Studio中,可以使用XML布局文件设计用户界面,包括一个EditText用于输入数据,以及一个Button触发生成二维码的逻辑。例如: ```xml android:id="@+id/et_data" android:layout_width="match_parent" ...
MyBatis Generator是基于Java的,它能够根据数据库表结构生成对应的Java实体类、Mapper接口和XML配置文件。通过在配置文件中指定数据库连接信息和生成规则,MBG能够自动生成代码,从而简化开发流程。 2. **分页...
- **前后端分离模式**:探讨前后端分离的设计理念及其优势,包括数据交换格式(JSON/XML)、API接口设计规范等内容。 - **前端技术栈**:介绍HTML5、CSS3、JavaScript等基础知识,以及Angular、React或Vue.js等现代...
MyBatis Generator(MBG)是一个强大的Java代码生成器,它可以自动为数据库中的表生成Java实体类、Mapper接口和XML配置文件。这个"generator-mybatis-generator.zip"压缩包包含了一个预配置好的MBG实例,方便用户...
- `java.sql`处理数据库连接,而`java.xml`支持XML处理。 3. **学习与应用**: - 开发者可以参考中文帮助文档,了解每个类和方法的用途、参数及返回值,提升编程效率。 - 在遇到问题时,可以快速查找相关API的...
这通常涉及XML或JSON等数据格式的解析,以便将试卷数据结构化。 2. **答案匹配**:考生提交的答案会被系统与正确答案进行比较。通过算法实现快速匹配,检查考生选择的选项是否与标准答案一致。 3. **分数计算**:...
Lombok是一款非常受欢迎的Java库,它通过注解的方式简化了Java对象的创建和维护,大大减少了冗余的getter、setter、构造函数等代码。在Android Studio中使用Lombok插件,开发者可以更加高效地编写代码,提升开发效率...
合理的命名可以减少阅读代码时的困惑,提升代码的可读性。 #### Javadoc注释 Javadoc是一种特殊的多行注释,用于生成API文档,以`/**`开始,`*/`结束。它支持HTML标记和特定的关键词,如`@author`、`@version`等,...
- **JSON**:JavaScript Object Notation,轻量级的数据交换格式,易于人阅读和编写,也易于机器解析和生成。JSON与JavaScript对象结构相同,可以方便地与JavaScript进行交互。 **四、jQuery和Ajax** jQuery库简化...
Android 程序执行需要读取到安全敏感项必需在 androidmanifest.xml 中声明相关权限请求,例如打电话、访问网络、获取坐标、读写 SD 卡、读写联系人等。在安装的时候会提示用户。文件系统的权限是 Linux 权限,例如 ...
6. **JTA**:Java事务API提供了跨越多个数据源的事务管理功能,确保了分布式环境下的数据一致性。 JavaEE SPI则允许开发者通过实现特定接口来扩展JavaEE API的功能。例如,你可以为JPA提供自定义的持久化提供者,...
在Java编程中,MD5常常被用来生成文件或字符串的唯一标识,进行数据完整性检查,以及密码存储时的加密。 这个压缩包包含了一个MD5相关的Java jar包——`JavaMD5.jar`,这可能是一个实现了MD5算法的库,方便开发者...
**1.1 Java的困惑** 随着互联网技术的发展,传统的Java开发方式面临着诸多挑战。Java虽然功能强大且成熟稳定,但在快速迭代、灵活应对需求变化方面显得力不足。开发者在进行Web应用开发时常常需要面对复杂的框架...
首先,让我们了解JavaScript,这个标签可能让人有些困惑,因为标题中提到了Java。实际上,JavaScript和Java是两种不同的编程语言。JavaScript主要用于前端网页开发,而Java则广泛应用于后端服务器、移动应用(尤其是...
- **XML的简单创建与分析**:Groovy提供了方便的API来创建和解析XML文档,使得处理XML数据变得简单快捷。 #### 三、配置 **3.1 配置基础与环境** - **环境设置**:Grails支持多种环境配置,如开发环境、测试环境...
在Web开发领域,JSP(Java Server Pages)是一种动态网页技术,它允许开发者在HTML页面中嵌入Java代码,实现服务器端的数据处理和动态内容生成。以下是JSP技术的一些关键知识点: 1. **JSP基本结构**:JSP页面由...
此模式会在指定目录或默认目录(在web.xml中定义)生成report document文件。 - **run**:同样使用Ajax,但不包含frameset的所有功能,不生成report document文件,也不支持分页。主要用于BIRT Designer的预览标签...
5. **网络编程**:讲解如何使用HttpURLConnection或OkHttp进行网络请求,以及如何处理JSON或XML数据。 6. **权限管理**:介绍AndroidManifest.xml中权限声明的重要性,以及如何处理运行时权限。 7. **多线程与异步...