首先说明,本文所说的XML文件是格式良好的普通XML文件,生成Java是原Java文件不存在从XML文件中生成。内容很简单,本文旨在抛砖引玉,欢迎文明留言交流。
今天一位朋友要我帮忙看下是否有一个工具,给定一个XML文件,生成一个JavaBean文件,并给我一个XML文件作为例子,以前XMl解析用过很多,使用XMl生成Java文件没见过,就自己弄了下,以下是我做的,我的方法是使用工具把XML文件转换为XSD文件,然后使用XJC生成Java文件,有更好的方法的朋友欢迎留言交流。
以我朋友提供的文件为例:
<fault> <faultId>10024</groupId> <!— 故障编号 <deviceId>10023</deviceId> <!— 设备编号 <deviceModel>10023</deviceModel> <!— 设备型号(设备细类ID) <groupId>1098</groupId > <!— ##### <processStat>1</processStat> <!— 0:处理中 1:已关单 <faultDesc>电视机坏</ faultDesc> <!—故障原因 <process>进行更换< process> <!—处理方法 <timeoutReason>超时原因</timeoutReason> <!—超时原因 <timeout>1.25</timeout> <!—超时时长 <protime>1.25</protime> <!—处理时长 <faulttime>2013-05-23 09:53:12</faulttime > <!—开单时间 <closetime>2013-05-23 09:53:12</closetime > <!—关单时间 </fault>
(一)把XML文件处理为标准XML文件
可以看出上面的格式不是很良好,处理结果如下:
<fault> <groupId>10024</groupId> <deviceId>10023</deviceId> <deviceModel>10023</deviceModel> <groupId>1098</groupId > <processStat>1</processStat> <faultDesc>电视机坏</faultDesc> <process>进行更换</process> <timeoutReason>超时原因</timeoutReason> <timeout>1.25</timeout> <protime>1.25</protime> <faulttime>2013-05-23 09:53:12</faulttime > <closetime>2013-05-23 09:53:12</closetime > </fault>
(二)XMl文件转换为XSD文件
这一步使用在线工具完成:
http://www.freeformatter.com/xsd-generator.html#ad-output
把XMl复制到文本框中,单击生成XSD按钮。
结果如下:
把XSD复制到文件中。
(三)修改XSD文件
时间类型字段faulttime和closetime修改type为xs:date,把<xs:choice maxOccurs="unbounded" minOccurs="0">修改为 <xs:sequence>,目的生成Java的属性。修改的文件如下:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="fault"> <xs:complexType> <xs:sequence> <xs:element type="xs:short" name="groupId"/> <xs:element type="xs:short" name="deviceId"/> <xs:element type="xs:short" name="deviceModel"/> <xs:element type="xs:byte" name="processStat"/> <xs:element type="xs:string" name="faultDesc"/> <xs:element type="xs:string" name="process"/> <xs:element type="xs:string" name="timeoutReason"/> <xs:element type="xs:float" name="timeout"/> <xs:element type="xs:float" name="protime"/> <xs:element type="xs:date" name="faulttime"/> <xs:element type="xs:date" name="closetime"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
(四)使用XJC把XSD转换为Java文件
在命令行下使用xjc -help可以查看xjc参数说明, -d文件目录,必须存在,p包名称 *.xsd当前路径下所有的xsd文件,其他的参数我就不介绍了
使用命令:
xjc -d src -p com.test.beans test_xsd.xsd
生成Java文件,结果如下。
(五) 去掉JAXB注释
自己写的一个处理文件类,写的不好请见谅:
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class 处理Java文件 { public static void main(String[] args) throws Exception { 处理Java文件 t = new 处理Java文件(); t.processJavaFile("F:/saveFile/tmp/src/com/test/beans/Fault.java", true, "utf-8"); } public void processJavaFile(String inputFile, boolean isProcess, String charSet) throws IOException { if (charSet == null) { charSet = "utf-8"; } File file = new File(inputFile); if (!file.exists() || file.isDirectory()) { throw new FileNotFoundException(); } BufferedReader br = new BufferedReader(new InputStreamReader( new FileInputStream(file), charSet)); boolean isComment = false; boolean isJaxbComment = false; String temp = null; StringBuilder sb = new StringBuilder(); while ((temp = br.readLine()) != null) { if (temp != null) { //干掉单行注释 if (temp.startsWith("//") || temp.startsWith("import javax.xml.bind.annotation.")) { continue; } else if (temp.indexOf("/**") != -1) { //多行注释开始 isComment = true; } else if (isComment && temp.endsWith("*/")) { //多行注释结束 isComment = false; continue; } // 处理jaxb注释 // 去掉@带括号或者@不带括号 temp = new String(temp.replaceAll("\\s*@.+\\(.+\\),?", "") .replaceAll("\\s*@[^()]+(\\r|\\n)?$", "")); if (temp.trim().length() == 0) { continue; } else if (temp.indexOf("@") != -1 && temp.indexOf("(") != -1 && temp.indexOf(")") == -1) { isJaxbComment = true; continue; } //跨行@结束 if (isJaxbComment && temp.indexOf(")") != -1) { isJaxbComment = false; continue; } if (!isComment && !isJaxbComment) { if (isProcess) { if(temp.indexOf("import javax.xml.datatype.XMLGregorianCalendar;")!=-1) { //一行一行读取;替换全行 temp="import java.util.Date;"; } temp = new String(temp .replaceAll("protected", "private") .replaceAll("short", "int") .replaceAll("byte", "int") .replaceAll("Byte", "int") .replaceAll("Integer", "int")) .replaceAll("XMLGregorianCalendar", "Date"); } sb.append(temp).append("\r\n"); } } } br.close(); temp = new String(sb.toString()); // 把空白换成"",然后使用trim过滤掉。 temp = new String(temp.replaceAll("\\s+\\r\\n", "\\r\\n")); file.delete(); OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream( inputFile), charSet); out.write(temp); out.flush(); out.close(); } }
处理结果如下:
缺点:注释不见了。
有更好方法的朋友欢迎留言交流。
本文系原创,转载请注明出处。
相关推荐
在Java编程中,生成XML文件并发送报文是一项常见的任务,尤其在系统间的数据交换、API调用或者网络通信中。XML(eXtensible Markup Language)是一种结构化数据表示语言,具有良好的可读性和可扩展性,是数据传输的...
Java语言在处理XML文件时,提供了丰富的API和库,使得我们可以轻松地读取、解析、修改和生成XML文档。在给定的场景中,我们主要关注如何使用Java来读取XML文件并根据需求生成新的文件。以下是关于这个主题的详细说明...
JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML
使用java把数据库数据导出生成xml文件 使用java把数据库数据导出生成xml文件
在Java编程中,生成XML文档是一项常见的任务,特别是在构建配置文件、数据交换或者保存结构化信息时。XML(eXtensible Markup Language)是一种标记语言,它的结构清晰、可读性强,非常适合用来存储和传输数据。...
同样,Java也可以反向操作,从XML生成Java对象或XSD。使用Unmarshaller可以将XML数据解析为Java对象,而使用工具如JAXB或XML Schema Tools则可以生成XSD文件。 在提供的压缩包文件`xml_test`中,可能包含了用于演示...
在Java编程环境中,生成Word文档是一项常见的任务,尤其在企业级应用中,如报告生成、数据分析等场景。XML解析方式是一种高效且灵活的方法,能够帮助我们实现这一目标。本篇文章将详细探讨如何利用Java和XML解析来...
在Java编程中,生成XML文件是一项常见的任务,特别是在数据存储、配置管理或数据交换的应用场景。XML(eXtensible Markup Language)是一种结构化数据格式,具有良好的可读性和易于解析的特点。本教程将深入讲解如何...
本文将详细介绍如何使用Java进行XML文件的读写操作,并基于读取到的数据生成树型菜单,以方便用户浏览和操作。 #### 二、关键概念解释 1. **XML文件**: 一种结构化数据存储的语言,用于标记电子文档。 2. **DOM ...
Java解析和生成XML的知识点主要涵盖了使用JAXB(Java Architecture for XML Binding)框架来实现Java对象与XML(可扩展标记语言)之间的数据转换。JAXB提供了一种便捷的方式,通过注解(Annotation)来实现这一过程...
JAVA中生成xml文件到指定路径和上传到ftp服务器到指定路径的方法。
本篇将深入探讨如何使用Java来自动生成Java类和XML文件,以及它在实际开发中的应用。 首先,我们要理解Java类和XML文件在软件工程中的角色。Java类是面向对象编程的基础,用于封装数据和行为,构建程序的结构。而...
本篇文章将深入探讨如何使用Java来生成XML文件,并结合数据库操作进行数据提取。 首先,我们需要了解XML的基本结构。XML文件由一系列元素组成,每个元素都有开始标签(如`<element>`)和结束标签(如`</element>`)...
2. **生成Java类结构**:根据XSD中的元素和属性,工具自动生成对应的Java类,每个元素变成类的一个字段,属性则作为类的getter和setter方法。 3. **处理复杂类型**:如果XSD中定义了复杂类型,工具会创建相应的Java...
java生成xml文件的时候如何控制xml的缩进格式.pdf
2. 如果XML结构固定且复杂,使用XSD文件生成Java类可以减少手动编码的工作量,也有助于保持代码与XML结构的一致性。 3. 在处理XML文件时,注意处理可能的编码问题,确保读写时使用正确的字符集。 4. 为提高性能,...
在Java编程中,读取XML文件并将其转换为树形结构是一种常见的操作,尤其是在处理配置文件、数据交换或解析XML文档时。以下是一篇详细解释如何实现这一过程的文章。 首先,我们需要了解XML(eXtensible Markup ...
用java生成xml文档.DocumentBuilderFactory DocumentBuilder Document doc;至此可以用doc来操作xml文档了
本文档通过一个具体的示例介绍了如何使用Java语言来生成XML文件,并对代码进行了详细的解析。 #### 二、核心库与依赖 本示例使用了`org.jdom`库来处理XML的生成。JDOM(Java Document Object Model)是一个用于...