-
Java 操作 XML(11)--XMLBeans 使用
XMLBeans 是一个 XML-Java 绑定工具,它可以很方便地解析 XML 及生成 XML。本文主要介绍 XMLBeans 的基本使用,文中所使用到的软件版本:Java 1.8.0_181、XMLBeans 4.0.0。
1、XMLBeans简介
XMLBeans 是Apache的一个开源项目主要实现将java对象和XML绑定的功能,类似 JAXB;官网地址:http://xmlbeans.apache.org/index.html。
使用 XMLBeans 处理XML大概有如下几个步骤:
a、xml 文件转换成 xsd 文件
b、使用XMLBeans的scomp命令生成对应的jar
c、把生成的jar导入classpath,解析或生成XML
2、XMLBeans使用
2.1、XML样例文件(sutdent.xml)
<?xml version="1.0" encoding="utf-8" ?> <school:grade xmlns:school="http://www.w3.org/TR/html4/school/"> <school:student rollno="1" age="11"> <school:firstname>cxx1</school:firstname> <school:lastname>Bob1</school:lastname> <school:nickname>stars1</school:nickname> <school:marks>85</school:marks> </school:student> <school:student rollno="2" age="12"> <school:firstname>cxx2</school:firstname> <school:lastname>Bob2</school:lastname> <school:nickname>stars2</school:nickname> <school:marks>85</school:marks> </school:student> <school:student rollno="3" age="13"> <school:firstname>cxx3</school:firstname> <school:lastname>Bob3</school:lastname> <school:nickname>stars3</school:nickname> <school:marks>85</school:marks> </school:student> </school:grade>
2.2、XML转XSD(sutdent.xsd)
XML转XSD可以使用XMLSpy等工具来处理,这里使用在在线的转换工具来处理(https://www.freeformatter.com/xsd-generator.html),转换后的xsd如下:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.w3.org/TR/html4/school/" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="grade"> <xs:complexType> <xs:sequence> <xs:element name="student" maxOccurs="unbounded" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element type="xs:string" name="firstname"/> <xs:element type="xs:string" name="lastname"/> <xs:element type="xs:string" name="nickname"/> <xs:element type="xs:byte" name="marks"/> </xs:sequence> <xs:attribute type="xs:byte" name="rollno" use="optional"/> <xs:attribute type="xs:byte" name="age" use="optional"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
2.3、xsdconfig配置文件(student.xsdconfig)
xsd配置文件(后缀为.xsdconfig)主要用来制定生成的Java Class的一些文件名规则和Package的名称:
<xb:config xmlns:xb="http://xml.apache.org/xmlbeans/2004/02/xbean/config"> <xb:namespace> <xb:package>com.abc.demo.general.xml</xb:package> </xb:namespace> </xb:config>
xsd文件中如果有命名空间,生成的包名是根据命名空间来的;xsdconfig配置不起作用。
2.4、使用XMLBeans的scomp命令生成jar包
C:\Users\wuyy\Downloads\xmlbeans-4.0.0\bin\scomp -out student.jar -compiler D:\soft\Java\jdk1.8.0_181\bin\javac student.xsd student.xsdconfig
参数说明:
-src [dir] -- 生成的Java源文件存放目录 -srconly -- 只生成Java源文件 -out [jarFileName] -- 生成的Jar文件,缺省是xmltypes.jar -compiler -- Java编译器的路径,即Javac的位置 schemaFile.xsd -- XML Schema文件位置 config.xsdconfig -- xsdconfig文件的位置
2.5、使用XMLBeans解析或生成XML
把生成的student.jar导入classpath,使用XMLBeans生成的中间类来解析或生成XML。
package com.abc.demo.general.xml; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3.tr.html4.school.GradeDocument; import java.util.List; /** * XMLBeans使用 */ public class XMLBeansCase { private static Logger logger = LoggerFactory.getLogger(XMLBeansCase.class); /** * java对象转成xml * @throws Exception */ @Test public void javaToXml() throws Exception { GradeDocument document = GradeDocument.Factory.newInstance(); GradeDocument.Grade grade = document.addNewGrade(); GradeDocument.Grade.Student student1 = grade.addNewStudent(); student1.setRollno((byte) 1); student1.setAge((byte) 10); student1.setFirstname("cxx1"); student1.setLastname("Bob1"); student1.setNickname("stars1"); student1.setMarks((byte) 85); GradeDocument.Grade.Student student2 = grade.addNewStudent(); student2.setRollno((byte) 2); student2.setAge((byte) 11); student2.setFirstname("cxx2"); student2.setLastname("Bob2"); student2.setNickname("stars2"); student2.setMarks((byte) 85); GradeDocument.Grade.Student student3 = grade.addNewStudent(); student3.setRollno((byte) 3); student3.setAge((byte) 12); student3.setFirstname("cxx3"); student3.setLastname("Bob3"); student3.setNickname("stars3"); student3.setMarks((byte) 85); document.save(System.out); } /** * xml转成java对象 * @throws Exception */ @Test public void xmlToJava() throws Exception { GradeDocument document = GradeDocument.Factory.parse(WoodstoxCase.class.getResourceAsStream("student3.xml")); GradeDocument.Grade grade = document.getGrade(); List<GradeDocument.Grade.Student> students = grade.getStudentList(); for (GradeDocument.Grade.Student student : students) { logger.info(student.getRollno() + "|" + student.getAge() + "|" + student.getFirstname() + "|" + student.getLastname() + "|" + student.getNickname()); } } }
来源:https://www.cnblogs.com/wuyongyin/p/14429239.html
最新更新
python爬虫及其可视化
使用python爬取豆瓣电影短评评论内容
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比