java - 如何使用 JAXB 返回 XML 文件
问题描述
我有一项学校作业,我需要使用 JAXB 框架来返回我机器上文件夹中的 xml。我需要返回的 XML 文件夹是以下一个,我必须使用 java 语言来完成。
<bookstore>
<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">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="web">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>
<book category="web" cover="paperback">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
相信我,我试图通过观看大量教程和官方 oracle 文档来为我的工作找到答案,但我没有任何成功。
解决方案
如果要在 XML 字符串中构建 Java 对象,请获取JAXBContext类的实例,以供JAXB API使用,因为它提供了解除、排序和验证操作的方法。然后获取JAXBContext的 Marshaller 实例。marshal()方法以XML 格式生成 Java 对象,然后可以将 XML 对象写入任何方式。例如:
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
public class JAXBTest {
public static void main(String[] args) {
Book book = new Book("Everyday Italian", 2005);
generateXML(book);
}
private static final void generateXML(Book book) {
try {
JAXBContext jaxbContext = JAXBContext.newInstance(Book.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
StringWriter stringWriter = new StringWriter();
marshaller.marshal(book, stringWriter);
System.out.println(stringWriter.toString());
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
输出:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<book>
<title>Everyday Italian</title>
<year>2005</year>
</book>
推荐阅读
- android - 为什么我生成 APK 时无法连接到 API?
- regex - 正则表达式批处理:在字母和数字之间插入空格
- flutter - 颤振 youtube_player_flutter:^7.0.0+7 http 请求错误
- r - 动态选择 Rmarkdown 文件
- qt - 如何从 Qt5 读取串行数据
- python - 使用元数据创建用于对象检测的 tflite 模型
- wxpython - wxPython 字体大小对于不同的小部件是不一致的。怎么修?
- c - 在 C 中将字符附加到空字符串的问题
- laravel - Grammar::parameterize(): 参数 #1 ($values) 必须是数组类型,给定字符串,调用
- java - Java(swing)中是否有任何功能无法切换或最小化该特定框架或窗口?