JAXB解析与生成XML

XML和Bean相转——JaxbUtils工具类 package com.lmp.utils; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; 阅读详情

使用JAXB可以快速完成Java类到XML的映射,方便XML文件的解析与生成。

常用注解

@XmlRootElement(name = "Country")
将Java类或枚举类型映射成XML中根元素,设置name属性的值可指定义根元素名称,不设置则默认为类型首字母小写的名称。

@XmlType(propOrder = {"name", "capital", "population", "foundationTime"})
将Java类后枚举类型映射到XML模式类型,设置propOrder可以指定生成XML中各元素的先后顺序。

@XmlElement(name = "CFoundationTime")
将JavaBean中的字段值映射到XML元素,设置name属性的值可指定XML元素的名称。

@XmlAttribute(name = "CRank", required = false)
将JavaBean中的字段映射到XML中元素的属性,设置name属性的值可指定xml中元素属性的名称;
至于required属性,官方文档是说指定 XML 模式属性是可选的还是必需的,不是特别理解。

@XmlElementWrapper(name = "CountryWrapper")
为集合生成xml包装器元素,简单来讲就是使XML元素更有层次感,更美观,该注解只能用在集合上。


例子

1、类结构如下

Country与Countries为映射对象;
JAXBUtils提供读写XML的方法;
JAXBXMLTest提供读写测试方法;

2、各个类如下

Country类:

package com.jaxb;

import javax.xml.bind.annotation.*;

@XmlType(propOrder = {"name", "capital", "population", "foundationTime"})
@XmlRootElement(name = "Country")
public class Country {
    private int population;
    private String name;
    private String capital;
    private int rank;
    private String foundationTime;

    public String getFoundationTime() {
        return foundationTime;
    }

    @XmlElement(name = "CFoundationTime")
    public void setFoundationTime(String foundationTime) {
        this.foundationTime = foundationTime;
    }

    public int getPopulation() {
        return population;
    }

    @XmlElement(name = "CPopulation")
    public void setPopulation(int population) {
        this.population = population;
    }

    public String getName() {
        return name;
    }

    @XmlElement(name = "CName")
    public void setName(String name) {
        this.name = name;
    }

    public String getCapital() {
        return capital;
    }

    @XmlElement(name = "CCapital")
    public void setCapital(String capital) {
        this.capital = capital;
    }

    public int getRank() {
        return rank;
    }

    @XmlAttribute(name = "CRank", required = true)
    public void setRank(int rank) {
        this.rank = rank;
    }

    @Override
    public String toString() {
        return "Country=[Name=" + this.getName() +
                ", Capital=" + this.getCapital() +
                ", Population=" + this.getPopulation() +
                ", FoundationTime=" + this.getFoundationTime() + "]";
    }
}

Countries类:

package com.jaxb;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;

@XmlRootElement(name = "Countries")
public class Countries {
    private List<Country> countries;

    public List<Country> getCountries() {
        return countries;
    }

    @XmlElementWrapper(name = "CountryWrapper")
    @XmlElement(name = "Country")
    public void setCountries(List<Country> countries) {
        this.countries = countries;
    }

    @Override
    public String toString() {
        return "Countries=[" + this.getCountries() + "]";
    }
}

JAXBUtils类:

package com.jaxb;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.File;

public class JAXBUtils {
    public static void writeXML(Object obj, File path, Class... clazz) throws JAXBException {
        JAXBContext jctx = JAXBContext.newInstance(clazz);
        Marshaller marshaller = jctx.createMarshaller();
        // 格式化输出,设置换行和缩进,不设置则会显示在一行
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(obj, path);
        // 设置控制台输出
        marshaller.marshal(obj, System.out);
    }

    public static Object readXML(File path, Class... clazz) throws JAXBException {
        JAXBContext jctx = JAXBContext.newInstance(clazz);
        Unmarshaller unMarshaller = jctx.createUnmarshaller();
        Object obj = unMarshaller.unmarshal(path);

        return obj;
    }
}

JAXBXMLTest类:

package com.jaxb;

import javax.xml.bind.JAXBException;
import java.io.File;
import java.time.LocalDate;
import java.util.ArrayList;

public class JAXBXMLTest {
    private static final String XML_PATH_COUNTRY = "./Country.xml";
    private static final String XML_PATH_COUNTRIES = "./Countries.xml";

    public static void main(String[] args) throws JAXBException {
        Country china = new Country();
        china.setName("中国");
        china.setCapital("北京");
        china.setPopulation(1400000000);
        china.setRank(25);
        String fTimeChina = LocalDate.of(1949, 10, 1).toString();
        china.setFoundationTime(fTimeChina);

        Country america = new Country();
        america.setName("United States of America");
        america.setCapital("New York");
        america.setPopulation(300000000);
        america.setRank(11);
        String fTimeAmerica = LocalDate.of(1776, 7, 4).toString();
        america.setFoundationTime(fTimeAmerica);

        File xmlFile = new File(XML_PATH_COUNTRY);
        File xmlFile1 = new File(XML_PATH_COUNTRIES);

        System.out.println("\n【写入到" + XML_PATH_COUNTRY + "】");
        JAXBUtils.writeXML(china, xmlFile, Country.class);

        System.out.println("\n【写入list到" + XML_PATH_COUNTRIES + "】");
        Countries countries = new Countries();
        ArrayList<Country> list = new ArrayList<>();
        list.add(china);
        list.add(america);
        countries.setCountries(list);
        JAXBUtils.writeXML(countries, xmlFile1, Countries.class);

        System.out.println("\n【从" + XML_PATH_COUNTRIES + "中读取】");
        Countries countriesRead = (Countries) JAXBUtils.readXML(xmlFile1, Countries.class, Country.class);
        System.out.println(countriesRead);

        System.out.println("\n【从" + XML_PATH_COUNTRY + "中读取】");
        Country countryRead = (Country) JAXBUtils.readXML(xmlFile, Country.class);
        System.out.println(countryRead);
    }
}

运行测试类,结果如下:


JAXB 生成XML文件 JAXB注解 java 关于xml的注解,自动生成xml文件 立即下载

相关推荐

SpringCloud2025+SpringBoot3.5.0动态路由503问题排查与负载均衡依赖解析

本文详细排查了SpringCloud 2025与SpringBoot 3.5.0环境下,Spring Cloud Gateway动态路由返回503错误的根本原因。核心问题在于新版网关未默认集成负载均衡器,导致无法解析lb://服务名。通过对比静态路由与动态路由,定位到需显式引入spring-cloud-starter-loadbalancer依赖,并提供了完整的解决方案与最佳实践配置。

s3t4u的博客 504

JAXB解析生成xml

1、简介 JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。JAXB 已经是jdk的组成部分,不需要另外引入jar包 2、几个核心注解 (1)@XmlRootElement(name = "response")  将Java类或枚举类型映射到XML元素。  (2)  @Xml

昕鸿的博客 1903

避开这些坑!baostock获取股票数据时最容易犯的5个错误(Python实战)

本文针对使用Python和baostock库获取股票历史数据时常见的五大陷阱,提供了实战解决方案。重点剖析了登录状态验证、参数配置、数据解析、批量操作效率及数据一致性校验等关键环节,帮助开发者构建稳健高效的数据获取流程,避免因细节疏忽导致的数据错误或性能瓶颈。

websocket5live的博客 1443

使用 JAXB 将内嵌的JAVA对象转换为 xml文件

获取一个目录下所有文件的元数据信息(文件名、大小、后缀等),并生成对应的xml文件中;的List作为属性,用来存储多个文件的元数据信息;注意建立 JAXBContext 时是以。用来保存多个文件的元数据信息;用来保存文件的元数据信息;类用来存储元数据信息;

机械工程跑路哥 1187

VUE3 实战手记(一)集成 EasyUI for Vue 组件库

本文详细介绍了如何在VUE3项目中集成EasyUI for Vue组件库,包括环境准备、基础安装、配置与集成、TypeScript类型问题解决以及组件实战等内容。EasyUI以其轻量级和开箱即用的特性,特别适合快速开发后台管理系统,提升开发效率。

weixin_30628801的博客 531

ptrade从零开始学量化第1期【ptrade如何新建策略、新建回测、新建交易】什么是ptrade量化交易?

回测之前需要对开始时间、结束时间、回测资金、回测基准、回测频率几个要素进行设定,设定完毕后点击保存。然后再点击回测按键,系统就会开始运行回测,回测的评价指标、收益曲线、日志都会在界面中展现。可以选择不同的业务类型(比如股票),然后给策略设定一个名称,添加成功后可以在默认策略模板基础上进行策略编写。交易界面点击新增按键进行新增交易操作,策略方案中的对象为所有策略列表中的策略,给本次交易设定名称并点击确定后系统就开始运行交易了。交易开始运行后,可以点击交易详情,查看策略评价指标、交易明细、持仓明细、交易日志。

GJ57017_wx的博客 2485

复杂xml解析(JAXB)

复杂xml处理, jaxb注解解析xml

做一个有信仰de人的博客 2937

deepin启动异常处理

修复的命令在执行时会输出大量的修复信息,正常情况下修复完之后输入exit命令回车后,即可正常启动系统。

whxxiang的博客 4371

jaxb xml生成与解析

JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标志可以转换为JSON对象的JAVA类。JAXB允许JAVA人员将JAVA类映射为XML表示方式,常用的注解包括:@XmlRootElement,@XmlElement等等。 JAXB(Java Architecture f

ooiuy450的专栏 892

SSH 远程登录报错:kex_exchange_identification: Connection closed.....

不知道为啥会出现这样的情形,最近这段时间登录都是正常的,不知道哪里抽风了,就提示这个。错误信息 kex_exchange_identification: Connection closed by remote host 出现在尝试使用 SSH 连接到远程服务器过程中,表明在密钥交换阶段的一开始,远程主机就关闭了连接。服务器的sshd_config文件中配置错误,可能是不允许的加密算法、修订文件中的语法错误,或者未正确指定用于SSH的HostKey。如果当前已有太多活动连接,新的连接尝试可能会被拒绝。

飞越蓝天的专栏 8299

基于Playwright和反爬虫规避技术的雪球股票讨论数据采集方案

随着量化投资和社交投资的兴起,雪球作为中国领先的投资社交平台,其用户讨论数据成为研究市场情绪的重要来源。本文将详细介绍如何使用最新的Playwright技术和反爬虫规避策略,构建一个高效、稳定的雪球股票讨论爬虫系统。本文详细介绍了基于Playwright的雪球股票讨论爬虫实现方案,涵盖了从基础配置到高级反爬虫策略的各个方面。AI驱动的反爬虫对抗更智能的请求调度算法区块链技术在数据溯源中的应用联邦学习在数据采集中的运用。

2201_76125261的博客 1010

JAXB 生成解析XML

JAXB概念:  java对象←→XML 相关类和接口:   JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。   Marshaller接口,将Java对象序列化为XML数据。   Unmarshaller接口,将XML数据反序列化为Java对象。 相关注解: @XmlRootElement,将Java类或枚举类型映射到XM...

weixin_30363981的博客 249

把审批体验做成一体化:SAP Business Workflow 里的 Secondary Method、Before Method 与 After Method

摘要:SAP Business Workflow 中,Task 的 Secondary、Before 和 After 三类方法对提升审批体验和可追溯性至关重要。Secondary Method 可自动展示辅助信息(如审批时弹出排班报表),但需注意其独立会话特性;Before Method 适合预处理和审计留痕;After Method 确保收尾动作可靠执行。三类方法按特定顺序调用,且错误不影响主流程。合理使用这些方法能减少事务码切换,增强审计能力,优化用户体验。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 191

java jaxb生成xml文件_利用oxygen编辑并生成xml文件,并使用JAVA的JAXB技术完成xml的解析...

首先下载oxygen软件(Oxygen XML Editor),目前使用的是试用版(可以安装好软件以后get trial licence,获得免费使用30天的权限,当然这里鼓励大家用正版软件!!!)1 首先建立一个空白XML文件,直接点击下图所示即可:2 可以使用xml文本编辑界面,或者使用xml树状图编辑界面切换到xml树状图编辑界面的方法为:即可调出当前xml文件所对应的xml树状图编辑界面3...

weixin_39525617的博客 261

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

JAXB xml生成与解析

JAXB(Java Architecture for XML Binding)是JSE和JEE平台的一部分,让开发者能够快速完成java类和XML的互相映射。常用的地方就是对象类和xml之间的映射,能够让bo自动生成节点,节点自动转成实体bo。JAXB封装在jdk中,jdk1.7及以上都不需要引入多于的jar包就可以完成JAXB代码开发了。下面结合具体常用实例来看特性~1.新建一个java工程,结...

非著名程序员 1131

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

jaxb xml 生成 java_java生成解析xml的另外两种方法JAXB

JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方...

weixin_35448391的博客 207

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java用jaxb三步解析xml_三步解决JAXB生成XML包含CDATA问题

废话不多说,写此文档的目的就是为了帮助java开发者,解决利用JAXB生成XML时,XML中带有CDATA问题。分三步走:首先创建适配器类:CDataAdapter.javapackage com.zhaoyx;import javax.xml.bind.annotation.adapters.XmlAdapter;//有时候 Java 类不能自然映射到自己所需的 XML 形式,//这时需要编写自...

weixin_35837856的博客 1052

JAXB + SOAP XML 生成与解析

首先说明一下,SOAP XML 和普通XML之间有什么区别 与SOAP XML 相比 XML 是没有什么固定的格式 而SOAP XML 则有固定的标签组成头部,响应信息,错误信息等 具体可参考 SOAP 语法 现在来说说怎么生成SOAP XML // 这是咱们要定义的格式内容 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://www.w3.org/">

哆啦A梦丶幻想的博客 3179

处理XML数据的解析与生成:使用DOM、SAX、JAXB等技术

处理XML数据的解析与生成可以使用不同的技术,如DOM(文档对象模型)、SAX(简单API for XML)和JAXB(Java Architecture for XML Binding)等。DOM适合对小型XML文档进行频繁的访问和修改,SAX适合处理大型XML文档或内存有限的情况,JAXB适合Java对象与XML数据之间的转换。- JAXB是一种将Java对象与XML数据进行绑定的技术,它可以将Java对象转换为XML数据(编组)或将XML数据转换为Java对象(解组)。

m0_75198698的博客 361

java生成xml2种_java生成解析xml的另外两种方法JAXB

DataBean.javapackage com.xidian.wq.imaopay.model.mesdata.base;import javax.xml.bind.annotation.XmlRootElement;/**** @author BYSocket* 报文头-[报文基础信息]*/@XmlRootElement(name="data_bean")public class DataBe...

weixin_33016355的博客 199

java生成解析xml的另外两种方法JAXB

JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用...

dipi2338的博客 149

java用jaxb三步解析xml_java使用jaxb解析XML(含根据xml自动生成实体类)

users.xml文件示例张三18李四19根据XML生成xsd将trang.jar和要解析的xml放在同一目录,在当前文件下执行如下命令,其中users.xsd为要生成的xsd文件名java -jar trang.jar users.xml users.xsdtrang.jar下载地址:https://download.youkuaiyun.com/download/zheng_chang_wei/10617...

weixin_32129195的博客 478

java使用jaxb解析XML(含根据xml自动生成实体类)

users.xml文件示例 <?xml version="1.0" encoding="UTF-8"?> <users> <user id="1"> <name>张三</name> <age>18</age> </user> <user ...

日薪灬越亿的博客 685

使用Java提供的JAXB生成和解析XML

1.Student类: package test; import java.util.List; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper

Seven's 专栏 1091
上一篇: 泛型擦除的简单验证
下一篇: Linux下公私钥登录
逆光下的轮廓
博客等级 码龄14年 13粉丝 24原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值