随心笔记,第六更

目录

一、 三步构建 XML转成java bean

1.XML转XSD

2.XSD转JavaBean

 3.jaxb 工具类

4.测试

📢📢📢📣📣📣
哈喽!大家好,我是「Leen」。刚工作几年,想和大家一同进步🤝🤝
一位上进心十足的Java博主!😜😜😜
喜欢尝试一些新鲜的东西,平时比较喜欢研究一些新鲜技术和一些自己没有掌握的技术领域。能用程序解决的坚决不手动解决😜😜😜

目前已涉足Java、Python、数据库(MySQL、pgsql、MongoDB、Oracle...)、Linux、HTML、VUE、PHP、C(了解不多,主要是嵌入式编程方向做了一些)...(还在不断地学习,扩展自己的见识和技术领域中),希望可以和各位大佬们一起进步,共同学习🤝🤝

✨ 如果有对【Java】,或者喜欢看一些【实操笔记】感兴趣的【小可爱】,欢迎关注我

❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️

今天给大家分享的是使用idea 将xml转为JavaBean并且取其中的数据和其他的数据进行交互,接下来直接上干货

一、 三步构建 XML转成java bean

1.XML转XSD

如果你是XSD的话,直接从 2 开始.

(1). 用idea打开xml文件,右击鼠标,选择 generate XSD from XML 如图

(2). 接下来是,选择自己想要的相关类型.如果想要生成的JavaBean属性和XML一致,记得选择Design type 为local elements type. 然后点击 OK 就可在当前文件夹生成了对应的XSD约束.

 

2.XSD转JavaBean

(1). 选中XSD,打开 并右键如下图,选中 generate javacode from XSD by JAXB

(新版idea用不了,可以用自己的idea试一下,我用2020前的试了一下是有的,2022的没有这个设置项)

 

如果idea没有这个功能的话,可以使用下面的命令进行转换

xjc -d "E:\\IdeaProjects\\test\\src\\main\\java\\com\\leen\\test\\test2024\\test605\\" -p com.leen.test.test2024.test605 "E:\\IdeaProjects\\test\\src\\main\\java\\com\\leen\\test\\test2024\\test605\\test.xsd"
#xjc -d 项目java文件夹 -p 包名 xsd文件名
#在xsd目录下执行,或者xsd文件名加上绝对路径

 3.jaxb 工具类

package com.leen.test.test2024.test605.utils;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;
import java.io.StringWriter;
/**
 * Author:Leen
 * Date: 2024/6/5 0005 15:17
 */

public class JaxbUtil {
    /**
     * JavaBean转换成xml
     * 默认编码UTF-8
     * @param obj
     * @return
     */
    public static String convertToXml(Object obj) {
        return convertToXml(obj, "UTF-8");
    }
    /**
     * JavaBean转换成xml
     * @param obj
     * @param encoding
     * @return
     */
    public static String convertToXml(Object obj, String encoding) {
        String result = null;
        try {
            JAXBContext context = JAXBContext.newInstance(obj.getClass());
            Marshaller marshaller = context.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);
            StringWriter writer = new StringWriter();
            marshaller.marshal(obj, writer);
            result = writer.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
    /**
     * xml转换成JavaBean
     * @param xml
     * @param c
     * @return
     */
    @SuppressWarnings("unchecked")
    public static <T> T converyToJavaBean(String xml, Class<T> c) {
        T t = null;
        try {
            JAXBContext context = JAXBContext.newInstance(c);
            Unmarshaller unmarshaller = context.createUnmarshaller();
            t = (T) unmarshaller.unmarshal(new StringReader(xml));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return t;
    }
}

4.测试

package com.leen.test.test2024.test605;

import com.leen.test.test2024.test605.utils.JaxbUtil;
import com.leen.test.test2024.test605.xmlFour.Bookstore;
import com.leen.test.test2024.test605.xmlOne.CAR;
import com.leen.test.test2024.test605.xmlOne.GATHERINFO;
import com.leen.test.test2024.test605.xmlTwo.COMMANDINFO;

/**
 * Author:Leen
 * Date: 2024/6/5 0005 15:18
 */
public class Test605 {
    public static void main(String[] args) {


        String xmlTest = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                "<bookstore>\n" +
                "    <book category=\"children\">\n" +
                "        <title lang=\"en\">Harry Potter</title>\n" +
                "        <author>J.K. Rowling</author>\n" +
                "        <year>2005</year>\n" +
                "        <price>29.99</price>\n" +
                "    </book>\n" +
                "    <book category=\"web\">\n" +
                "        <title lang=\"en\">Learning XML</title>\n" +
                "        <author>Erik T. Ray</author>\n" +
                "        <year>2003</year>\n" +
                "        <price>39.95</price>\n" +
                "    </book>\n" +
                "    <book category=\"cooking\">\n" +
                "        <title lang=\"en\">Everyday Italian</title>\n" +
                "        <author>Giada De Laurentiis</author>\n" +
                "        <year>2005</year>\n" +
                "        <price>30.00</price>\n" +
                "    </book>\n" +
                "    <book category=\"children\">\n" +
                "        <title lang=\"en\">Charlotte's Web</title>\n" +
                "        <author>E. B. White</author>\n" +
                "        <year>1952</year>\n" +
                "        <price>25.00</price>\n" +
                "    </book>\n" +
                "</bookstore>\n";
        Bookstore bookstore = JaxbUtil.converyToJavaBean(xmlTest, Bookstore.class);
        System.out.println(bookstore.getBook().get(0).getAuthor());

        String resTest = JaxbUtil.convertToXml(bookstore);
        System.out.println(resTest);


    }
}

输出结果 :

J.K. Rowling
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<bookstore>
    <book category="children">
        <title lang="en">Harry Potter</title>
        <author>J.K. Rowling</author>
        <year>2005</year>
        <price>29.99</price>
    </book>
    <book category="web">
        <title lang="en">Learning XML</title>
        <author>Erik T. Ray</author>
        <year>2003</year>
        <price>39.95</price>
    </book>
    <book category="cooking">
        <title lang="en">Everyday Italian</title>
        <author>Giada De Laurentiis</author>
        <year>2005</year>
        <price>30.00</price>
    </book>
    <book category="children">
        <title lang="en">Charlotte's Web</title>
        <author>E. B. White</author>
        <year>1952</year>
        <price>25.00</price>
    </book>
</bookstore>

这样就把xml里面的数据给取出来了,兄弟们就可以进行后续的操作了

欢迎大家在评论区讨论,今天的干货分享就到此结束了,如果觉得对您有帮助,麻烦给个三连!

以上内容为本人的经验总结和平时操作的笔记。若有错误和重复请联系作者删除!!感谢支持!!

 

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leen@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值