根据Xml文件生成xsd文件
下载trang.jar文件
访问mvnrepository网站,搜索trang
使用Trang将xml文件转xsd文件
java -jar trang-20091111.jar mytest.xml ScriptDetail.xsd
java -jar trang-20091111.jar <Xml文件> <生成的xsd文件>
根据xjc生成Java对象
基于xsd文件生成Java对象
java -D"file.encoding"=UTF-8 -cp D:\java\jdk1.8.0_121\lib\tools.jar com.sun.tools.internal.xjc.Driver -d generated -p com.xxx.bean ScriptDetail.xsd
java -D"file.encoding"=<字符集> -cp <tools.jar位置> com.sun.tools.internal.xjc.Driver -d <文件创建目录> -p <Java对象package路径> <xsd文件>
注:Java11以后Jaxb想不包以从jdk中移除,使用Jaxb需要单独引入包。
MAVEN引入方式
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.11</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
Java解析Xml工具类
import java.io.InputStream;
import java.io.OutputStream;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import com.autotest.selenium.scriptparse.bean.ScriptDetail;
import lombok.extern.slf4j.Slf4j;
/**
* 脚本工具类
*
*/
@Slf4j
public class ScriptDetailUtil {
private ScriptDetailUtil() {}
/**
* 根据XML文件输入流内容转成java对象
*
* @param stream
* @param clazz
* @return
*/
@SuppressWarnings("unchecked")
public static <T> T xmlToBean(InputStream stream, Class<T> clazz) {
// 获取JAXB的上下文环境,需要传入具体的 Java bean -> 这里使用Student
T bean = null;
try {
JAXBContext context = JAXBContext.newInstance(clazz);
// 创建 UnMarshaller 实例
Unmarshaller unmarshaller = context.createUnmarshaller();
// 将XML数据序列化 -> 该方法的返回值为Object基类,需要强转类型
bean = (T)unmarshaller.unmarshal(stream);
} catch (JAXBException e) {
log.error("解析Xml文件错误", e);
}
return bean;
}
/**
* 根据文件输入流将java对象写入XML文件
*
* @param stream
* @param data
*/
public static <T> void beanToXml(OutputStream stream, Object data) {
try {
// 获取JAXB的上下文环境,需要传入具体的 Java bean -> 这里使用Student
JAXBContext context = JAXBContext.newInstance(ScriptDetail.class);
// 创建 Marshaller 实例
Marshaller marshaller = context.createMarshaller();
// 设置转换参数 -> 这里举例是告诉序列化器是否格式化输出
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
// 将所需对象序列化 -> 该方法没有返回值
marshaller.marshal(data, stream);
// log.debug("Xml:{}", stream.toString());
} catch (JAXBException e) {
log.error("解析Xml文件错误", e);
}
}
}