java对象直接转换成xml格式
转:JaxbContext生成xml文件或java类对象转化注解

转:JaxbContext⽣成xml⽂件或java类对象转化注解XmlAccessType.FIELD:映射这个类中的所有字段到XMLXmlAccessType.PROPERTY:映射这个类中的属性(get/set⽅法)到XMLXmlAccessType.PUBLIC_MEMBER:将这个类中的所有public的field或property同时映射到XML(默认)XmlAccessType.NONE:不映射@XmlElement指定⼀个字段或get/set⽅法映射到XML的节点。
如,当⼀个类的XmlAccessorType 被标注为PROPERTY时,在某⼀个没有get/set⽅法的字段上标注此注解,即可将该字段映射XML。
参数:defaultValue 指定节点默认值name 指定节点名称namespace 指定节点命名空间required 是否必须(默认false)nillable 该字段是否包含 nillable="true" 属性(默认为false)type定义该字段或属性的关联类型@XmlAttribute 指定⼀个字段或get/set⽅法映射到XML的属性。
参数:name 指定属性名称namespace 指定属性命名空间required 是否必须(默认为false)@XmlTransient 定义某⼀字段或属性不需要被映射为XML。
如,当⼀个类的XmlAccessorType 被标注为PROPERTY时,在某⼀get/set⽅法的字段上标注此注解,那么该属性则不会被映射。
@XmlType 定义映射的⼀些相关规则参数:propOrder 指定映射XML时的节点顺序factoryClass 指定UnMarshal时⽣成映射类实例所需的⼯⼚类,默认为这个类本⾝factoryMethod 指定⼯⼚类的⼯⼚⽅法name 定义XML Schema中type的名称namespace 指定Schema中的命名空间@XmlElementWrapper 为数组元素或集合元素定义⼀个⽗节点。
JaxbContext生成xml文件或java类对象转化注解

JAXB(Java API for XML Binding),提供了一个快速便捷的方式将Java对象与XML进行转换。
在JAX-WS(Java的WebService规范之一)中,JDK1.6 自带的版本JAX-WS2.1,其底层支持就是JAXB。
JAXB 可以实现Java对象与XML的相互转换,在JAXB中,将一个Java对象转换为XML 的过程称之为Marshal,将XML转换为Java对象的过程称之为UnMarshal。
我们可以通过在Java 类中标注注解的方式将一个Java对象绑定到一段XML,也就是说,在Java类中标注一些注解,这些注解定义了如何将这个类转换为XML,怎么转换,以及一段XML如何被解析成这个类所定义的对象;也可以使用JAXB的XJC工具,通过定义schema的方式实现Java 对象与XML的绑定(这个下次研究)。
下面来了解一下如何通过标注注解来完成 Marshal 和 UnMarshal 的过程。
我用的是JAXB2_20101209.jar ,可以到[url]/[/url] 下载最新版本。
首先看个小例子定义一个java类Java代码package com.why.jaxb;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElementpublic class People {public String id = "001";public String name = "灰太狼";public int age = 26;}Java To XML(Marshal)Java代码package com.why.jaxb;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Marshaller;public class Java2XML {/*** @param args* @throws JAXBException*/public static void main(String[] args) throws JAXBException {JAXBContext context = JAXBContext.newInstance(People.class);Marshaller marshaller = context.createMarshaller();marshaller.setProperty(Marshaller.JAXB_ENCODING,"gb2312");//编码格式marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);//是否格式化生成的xml串marshaller.setProperty(Marshaller.JAXB_FRAGMENT, false);//是否省略xml 头信息(<?xml version="1.0" encoding="gb2312" standalone="yes"?>)People people = new People();marshaller.marshal(people, System.out);}}XML To Java(UnMarshal)Java代码package com.why.jaxb;import java.io.File;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBException;import javax.xml.bind.Unmarshaller;import org.xml.sax.SAXException;public class XML2Java {/*** @param args* @throws JAXBException* @throws JAXBException* @throws SAXException*/public static void main(String[] args) throws JAXBException {JAXBContext context = JAXBContext.newInstance(People.class);Unmarshaller unmarshaller = context.createUnmarshaller();File file = new File("src/people.xml");People people = (People)unmarshaller.unmarshal(file);System.out.println(people.id);System.out.println();System.out.println(people.age);}}其实Marshal 和UnMarshal的过程并不复杂,只需要从JAXBContext中获得Marshaller或Unmarshaller对象,就可以让JAXB帮我们来进行转换了。
java对象与xml间的转换

castor: java对象与xml间的转换2008-10-30 10:33说明:交换数据时,可以考虑使用castor,把Java对象的转换成xml 进行远程传递【代替序列化】参考中说:castor和xmlbeans这种都是先定义schema,然后根据schema 来generate java class,然后调用marshall和unmarshall方法来序列化javabean。
这是属于重量级的方法,虽然功能强大,使用却不方便。
如果你改了schema,势必要重新generate,这样你就不能在generate的java class上加上自己的方法。
导致生成的java class纯粹用于serialize使用过程:1. 根据应用逻辑,编写xml schema文件。
示例如下:<?xml version="1.0" encoding="ISO-8859-1" ?><xs:schema xmlns:xs="/2001/XMLSchema" targetNamespace="/Test/ProductPromotionAd"><xs:element name="ProductPromotionAdResultItem"><xs:complexType><xs:sequence><xs:element name="itemcode" type="xs:string"/><xs:element name="hasPromotionAd" type="xs:boolean"/> </xs:sequence></xs:complexType></xs:element><xs:element name="ProductPromotionAdResults"><xs:complexType><xs:sequence><xs:element ref="ProductPromotionAdResultItem" maxOccurs="unbounded" minOccurs="1"/></xs:sequence></xs:complexType></xs:element></xs:schema>2.castor 根据xml schema 生成JavaBean;编写类似的脚本如下:@echo offREM Change the following line to set your JDK pathset JAVA_HOME=%JAVA_HOME%set JAVA=%JAVA_HOME%\bin\javaset JAVAC=%JAVA_HOME%\bin\javac@echo Create the classpathset CP=.for %%i in (..\..\..\lib\*.jar) do set CP=%CP%;%%iset CP=%CP%;..\..\..\build\classes;%JDK_BIN%\lib\tools.jar@echo.@echo Using classpath: %CP%@echo Castor Test Cases@echo.@echo Generating classes...@rem Java 2 style collection types@rem %JAVA% org.exolab.castor.builder.SourceGeneratorMain -i productPromotionAd.xsd -f -types j2@rem Java 1.1 collection types%JAVA% -cp %CP% org.exolab.castor.builder.SourceGeneratorMain -i productPromotionAd.xsd -f或者利用ant生成,其代码段示例为:<target name="generateCastorClasses" depends="."><java classname="org.exolab.castor.builder.SourceGenerator"><arg line="-dest '${dir}/source' -i '${dir}/config/Export.xsd' -f-package com.object" /><classpath><fileset dir="${dir}/lib"><include name="*.jar" /></fileset></classpath></java></target>3. 客户服务器端使用JavaBean,传输时,服务器端把JavaBean Marshall 成xml,客户端把xml unmarshall成 JavaBean测试代码如下:public class TestCastorXml{private static void readTest() {try {ProductPromotionAdResults readXml =ProductPromotionAdResults.unmarshal(new FileReader("e:\\text.xml")); for(int i=0;i<readXml.getProductPromotionAdResultItemCount(); i++) {System.out.println(readXml.getProductPromotionAdResul tItem(i).getItemcode() + "-->" +readXml.getProductPromotionAdResultItem(i).ge tHasPromotionAd());}}catch(Exception e) {e.printStackTrace();}}private static void writeTest() {try {Writer w = new FileWriter("e:\\text.xml");ProductPromotionAdResults resultXml=new ProductPromotionAdResults();for(int i=0; i<3; i++) {ProductPromotionAdResultItem item = new ProductPromotionAdResultItem();item.setItemcode(i + "");item.setHasPromotionAd(true);resultXml.addProductPromotionAdResultItem(item);System.out.println("write finished");}resultXml.marshal(w);}catch(Exception e) {e.printStackTrace();}}public static void main(String[] args) {//writeTest();readTest();}}附录:需要的包castor-1.2-anttasks.jarcastor-1.2-codegen.jarcastor-1.2-ddlgen.jarcastor-1.2-jdo.jarcastor-1.2-xml-schema.jarcastor-1.2-xml.jarcastor-1.2.jarcommons-collections-3.2.jarcommons-lang-2.1.jarcommons-logging-1.1.jarderby-10.1.2.1.jarjdbc-se2.0.jarjta1.0.1.jarlog4j-1.2.8.jarvelocity-dep-1.5.jarxerces-J_1.4.0.jar根据XML Schema生成java类2009年10月20日星期二15:09JAXB提供了可以从schema生成java类,下面简要介绍一下生成的步骤:1:下载jaxb包 jaxb 2_1_9.zip ,下载解压后得到四个目录,包含bin、lib 、docs、example2:在"cmd"里进入到bin目录,如C:\>cd C:\jaxb2.1.9\bin 回车3:输入xjc c:\students.xsd -d c:\src -p com.entity 回车注:-d 说明要生成的java类存放目录-p 为生成java类指定的包名students.xsd 为自己定义的Schemajaxb配置及使用过程2007-10-16 09:01接触jaxb是因为项目中需要使用xml模式,并通过网络传送xml文件的内容,听同学说他在单位实习时用jaxb工具实现xml模式到java类的映射,这样可以通过操纵java类来实现对xml文档的控制,屏蔽了用dom或者sax解析器的一些内容,使操作更为简单。
java用dom4j将数据转化成xml文件

package com.hover.mail;import java.io.File;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException;import java.io.OutputStreamWriter;import java.io.Writer;import java.util.HashMap;import java.util.List;import java.util.Map;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;public class FindXmlDoc {/**** @Description 创建xml文件* @param filename* @param rootElement* void* @throws 抛出异常说明*/public static void createXMLFile(String filename,String rootElement) {/** 建立document对象*/Document document = DocumentHelper.createDocument();/** 添加根节点*/document.addElement(rootElement);try {/** 将document中的内容写入文件中*/XMLWriter writer = new XMLWriter(new FileWriter(new File(filename)));writer.write(document);writer.close();} catch (Exception ex) {}}/**** @Description 保存编辑的XML文件* @param document* @param filepath* @return boolean flag 是否保存成功标记* boolean* @throws 抛出异常说明*/public boolean saveDocument(Document document,String filepath) {boolean flag = false;Writer writer = null;XMLWriter xmlWriter = null;try {writer = new OutputStreamWriter(new FileOutputStream(filepath),"utf-8");OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("utf-8");xmlWriter = new XMLWriter(writer,format);xmlWriter.write(document);writer.close();flag = true;} catch (IOException e) {return false;}return flag;}/**** @Description 获取XML文件中的信息,如果文件存在,返回document,如果不存在,返回null* @param filepath* @return* Document* @throws 抛出异常说明*/public Document getDocument(String filepath) {Document document = null;SAXReader reader = new SAXReader();try {File file = new File(filepath);if(file.exists()){document = reader.read(file);//不是以UTF-8来读取。
jaxbelement格式 -回复

jaxbelement格式-回复JAXBElement格式是XML文档中常见的一种元素类型。
它提供了一种通用的方式来表示XML中的元素和对应的数据类型。
在本文中,我们将逐步解释JAXBElement的概念、用法和具体步骤。
第一步:了解JAXBElement的概念JAXB(Java Architecture for XML Binding)是Java中用于XML数据绑定的一种技术。
它允许将XML文档转换为Java对象,并将Java对象转换为XML文档。
JAXBElement是JAXB库中的一个关键类,用于表示XML文档中的元素。
JAXBElement是一个泛型类,在Java中表示为JAXBElement<T>,其中T表示元素的类型。
它由包含元素值的数据类型和元素的本地名称组成。
JAXBElement提供了一个通用的方式来表示XML文档中的元素和元素的数据类型。
第二步:使用JAXBElement的步骤在使用JAXBElement之前,我们需要进行准备工作。
首先,我们需要创建一个Java类来表示XML文档中的元素及其属性。
可以使用JAXB提供的xjc工具从XML模式文件(XSD)生成Java类,或手动创建Java类来表示元素。
接下来,我们需要创建一个JAXBContext对象。
JAXBContext是JAXB 库中的一个重要类,用于提供操作XML数据绑定的环境。
可以通过调用JAXBContext.newInstance()方法并传入要绑定的Java类来创建JAXBContext对象。
然后,我们可以使用JAXB生成器(Marshaller)将Java对象转换为XML 文档。
首先,创建一个JAXB生成器对象,通过调用JAXBContext的createMarshaller()方法实现。
然后,使用生成器的marshal()方法将Java 对象转换为XML文档。
在marshal()方法中,我们可以传入表示要生成的元素的JAXBElement对象。
Java对象转xml字符串

Java对象转xml字符串需求主要是⽤于数据的传输,系统先将所需数据以对象形式封装填充出来,然后再由对象转为xml1,⾸先定义⼀个接⼝,定义⼀个创建xml的⽅法public interface IFileCreateService {FileReturnModel createFile(Object object) throws MessageConvertException;}2,接下来是实现⽅法@Overridepublic FileReturnModel createFile(Object object) throws MessageConvertException {FileReturnModel fileReturnModel = new FileReturnModel();XMLOutputFactory factory = XMLOutputFactory.newInstance();StringWriter sw = new StringWriter();XMLStreamWriter writer = null;try {writer = factory.createXMLStreamWriter(sw);createTitle(writer);createBody(writer, object);} catch (XMLStreamException e) {e.printStackTrace();throw new MessageConvertException("报⽂转换异常 XMLStreamException", e);} catch (IllegalAccessException e) {e.printStackTrace();throw new MessageConvertException("报⽂转换异常 IllegalAccessException", e);} catch (NoSuchMethodException e) {e.printStackTrace();throw new MessageConvertException("报⽂转换异常 NoSuchMethodException", e);} catch (InvocationTargetException e) {e.printStackTrace();throw new MessageConvertException("报⽂转换异常 InvocationTargetException", e);} catch (Exception e) {e.printStackTrace();throw new MessageConvertException("报⽂转换异常 NoSuchFieldException", e);} finally {try {if (null != writer) {writer.flush();writer.close();fileReturnModel.setFileContext(sw.toString());}} catch (XMLStreamException e) {e.printStackTrace();throw new MessageConvertException("报⽂转换异常流关闭错误 XMLStreamException", e);}}return fileReturnModel;}3,createTitle()⽅法作⽤是编写标题信息,也就是xml头部信息,定义约束protected void createTitle(XMLStreamWriter writer) throws XMLStreamException {writer.writeStartDocument("UTF-8", "1.0");// writer.writeCharacters("\n");}4,createBody()⽅法private void createBody(XMLStreamWriter writer, Object obj) throws XMLStreamException, IllegalArgumentException, IllegalAccessException, SecurityException, NoSuchMethodException, InvocationT if (obj.getClass().isAnnotationPresent(Model.class)) {Model model = obj.getClass().getAnnotation(Model.class);writer.writeStartElement(());writeXmlBody(writer, obj.getClass(), obj);writer.writeEndElement();}}红⾊字体的Model是定义的@Model注解,⽤于扩展属性,如下图,()就是"CONTRACT"5,writeXmlBody()⽅法编写具体的标签及属性protected void writeXmlBody(XMLStreamWriter writer,Class clas, Object object) throws XMLStreamException, IllegalArgumentException, IllegalAccessException, SecurityException, NoSuchMethodExcField[] fields = clas.getDeclaredFields();for (Field field : fields) {field.setAccessible(true);Property propertyAnnotation = field.getAnnotation(Property.class);if (null == propertyAnnotation){continue;}if (Collection.class.isAssignableFrom(field.getType())) {//集合Collection collection = (Collection) field.get(object);if (collection != null) {for (Object objInner : collection) {writeXmlBody(writer, objInner.getClass(),objInner);}}} else if (Date.class.isAssignableFrom(field.getType())) {//⽇期Date date = (Date) field.get(object);writer.writeStartElement(());writer.writeCharacters(formateDate(date));writer.writeEndElement();} else if (String.class.isAssignableFrom(field.getType())||Double.class.isAssignableFrom(field.getType())||Integer.class.isAssignableFrom(field.getType())||Float.class.isAssignableFrom(field.getT writer.writeStartElement(());writer.writeCData(fillData(field.get(object)));writer.writeEndElement();} else if(byte[].class.isAssignableFrom(field.getType())){//字节writer.writeStartElement(());if(null!=field.get(object)){byte[] bytes= (byte[]) field.get(object);writer.writeCData(new String(bytes,"GBK"));}else{writer.writeCData("");}writer.writeEndElement();}else {//类对象Object obj = field.get(object);if(!"model".equals(field.getName())){writer.writeStartElement(());}if (null != obj) {writeXmlBody(writer, obj.getClass(),obj);//这⾥使⽤了递归//加载⽗类的属性writeXmlBody(writer, obj.getClass().getSuperclass(),obj);}if(!"model".equals(field.getName())) {writer.writeEndElement();}}}}需要注意,由于⽰例中,我给Contract对象使⽤了@Model注解,其成员变量,我使⽤@Property注解,那么在writeXmlBody()⽅法中,我编写xml取的是注解中的属性,也就是说⼤写的CONTRACT,CONTRACTCODE。
JAVA对象转换成XML(CDATA)

JAVA对象转换成XML(<![CDATA[文本内容]]>)编者小结:将java对象转换成xml文件很简单,但是将java对象转换成<![CDATA[文本内容]]>输出结果不转义的形式就相当不易。
大家都知道在XML 元素中,"<" 和"&" 是非法的。
"<" 会产生错误,因为解析器会把该字符解释为新元素的开始。
"&" 也会产生错误,因为解析器会把该字符解释为字符实体的开始。
某些文本,比如JavaScript 代码,包含大量"<" 或"&" 字符。
为了避免错误,可以将脚本代码定义为CDATA。
CDATA:在标记CDATA下,所有的标记、实体引用都被忽略,而被XML处理程序一视同仁地当作字符数据看待,CDATA的形式如下:<![CDATA[文本内容]]>CDATA的文本内容中不能出现字符串“]]>”,另外,CDATA不能嵌套。
具体实现过程如下:Java实体类:public class JavaDocu {private int id;private String text;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getText() {return text;}public void setText(String text) {this.text = text;}}MyXppDriver类:public class MyXppDriver extends XppDriver {public HierarchicalStreamWriter createWriter(Writer out){return new MyPrettyPrintWriter(out);}}MyPrettyPrintWriter类:public class MyPrettyPrintWriter implements ExtendedHierarchicalStreamWriter {private final QuickWriter writer;private final FastStack elementStack = new FastStack(16);private final char[] lineIndenter;private boolean tagInProgress;private int depth;private boolean readyForNewLine;private boolean tagIsEmpty;private static final char[] AMP = "&".toCharArray();private static final char[] LT = "<".toCharArray();private static final char[] GT = ">".toCharArray();private static final char[] SLASH_R = " ".toCharArray();private static final char[] QUOT = """.toCharArray();private static final char[] APOS = "'".toCharArray();private static final char[] CLOSE = "</".toCharArray();public MyPrettyPrintWriter(Writer writer, char[] lineIndenter) { this.writer = new QuickWriter(writer);this.lineIndenter = lineIndenter;}public MyPrettyPrintWriter(Writer writer, String lineIndenter) { this(writer, lineIndenter.toCharArray());}public MyPrettyPrintWriter(PrintWriter writer) {this(writer, new char[] { ' ', ' ' });}public MyPrettyPrintWriter(Writer writer) {this(new PrintWriter(writer));}@Overridepublic void addAttribute(String key, String value) {writer.write(' ');writer.write(key);writer.write('=');writer.write('\"');writeAttributeValue(writer, value);writer.write('\"');}protected void writeAttributeValue(QuickWriter writer, String text) { int length = text.length();for (int i = 0; i < length; i++) {char c = text.charAt(i);switch (c) {case'&':this.writer.write(AMP);break;case'<':this.writer.write(LT);break;case'>':this.writer.write(GT);break;case'"':this.writer.write(QUOT);break;case'\'':this.writer.write(APOS);break;case'\r':this.writer.write(SLASH_R);break;default:this.writer.write(c);}}}@Overridepublic void endNode() {depth--;if (tagIsEmpty) {writer.write('/');readyForNewLine = false;finishTag();elementStack.popSilently();} else {finishTag();writer.write(CLOSE);writer.write((String) elementStack.pop());writer.write('>');}readyForNewLine = true;if (depth == 0) {writer.flush();}}@Overridepublic void setValue(String text) {readyForNewLine = false;tagIsEmpty = false;finishTag();writeText(writer, text);}protected void writeText(QuickWriter writer, String text) { int length = text.length();String CDATAPrefix = "<![CDATA[";if (!text.startsWith(CDATAPrefix)) {for (int i = 0; i < length; i++) {char c = text.charAt(i);switch (c) {case'&':this.writer.write(AMP);break;case'<':this.writer.write(LT);break;case'>':this.writer.write(GT);break;case'"':this.writer.write(QUOT);break;case'\'':this.writer.write(APOS);break;case'\r':this.writer.write(SLASH_R);break;default:this.writer.write(c);}}}else {for (int i = 0; i < length; i++) {char c = text.charAt(i);this.writer.write(c);}}}@Overridepublic void startNode(String name) { tagIsEmpty = false;finishTag();writer.write('<');writer.write(name);elementStack.push(name);tagInProgress = true;depth++;readyForNewLine = true;tagIsEmpty = true;}private void finishTag() {if (tagInProgress) {writer.write('>');}tagInProgress = false;if (readyForNewLine) {endOfLine();}readyForNewLine = false;tagIsEmpty = false;}protected void endOfLine() {writer.write('\n');for (int i = 0; i < depth; i++) {writer.write(lineIndenter);}}public void flush() {writer.flush();}public void close() {writer.close();}@Overridepublic HierarchicalStreamWriter underlyingWriter() {return this;}@Overridepublic void startNode(String name, @SuppressWarnings("rawtypes") Class arg1) {// TODO Auto-generated method stubtagIsEmpty = false;finishTag();writer.write('<');writer.write(name);elementStack.push(name);tagInProgress = true;depth++;readyForNewLine = true;tagIsEmpty = true;}}Java测试类:public class JavaDocuTest {public static void main(String[] args) throws IOException, JAXBException {Long t1 = System.currentTimeMillis();String CDATAPrefix = "<![CDATA[";String CDATABackfix = "]]>";JavaDocu javadocu = new JavaDocu();JavaDocu javadocu2 = new JavaDocu();javadocu.setText(CDATAPrefix + "这是一个测试" + CDATABackfix);javadocu2.setText(CDATAPrefix + "这又是一个测试" + CDATABackfix);List<JavaDocu> list = new ArrayList<JavaDocu>();list.add(javadocu);list.add(javadocu2);XStream xstream = new XStream(new MyXppDriver());for (int i = 0; i < list.size(); i++) {list.get(i).setId(i);xstream.alias("javatoxml", JavaDocu.class);eAttributeFor(JavaDocu.class, "id");// eAttributeFor("id",String.class);}System.out.println(xstream.toXML(list));xstream.toXML(list, new PrintWriter("c:\\测试.xml", "utf-8"));}}以上代码可实现将javabean转换成包含<![CDATA[文本内容]]>的xml文件。
jaxbcontext字符串转xml方法

jaxbcontext字符串转xml方法【最新版3篇】篇1 目录1.JAXBContext 简介2.字符串转 XML 的实现方法3.示例代码篇1正文1.JAXBContext 简介JAXB(Java Architecture for XML Binding)是 Java 中的一种用于将 Java 对象转换为 XML 格式,以及将 XML 格式转换为 Java 对象的技术。
在 JAXB 中,JAXBContext 是一个非常重要的类,它用于创建和配置 JAXB 实现。
JAXBContext 通过 unmarshal 方法可以将 XML 格式的数据转换为 Java 对象,通过 marshal 方法可以将 Java 对象转换为XML 格式的数据。
2.字符串转 XML 的实现方法要实现字符串转 XML 的功能,我们可以通过以下步骤:(1)创建一个 Java 类,该类的属性与目标 XML 结构相对应。
(2)使用 JAXBContext 的 unmarshal 方法将 XML 字符串转换为Java 对象。
(3)使用 JAXBContext 的 marshal 方法将 Java 对象转换为 XML 字符串。
3.示例代码下面是一个简单的示例,展示了如何使用 JAXBContext 将字符串转换为 XML:```javaimport javax.xml.bind.JAXBContext;import javax.xml.bind.Marshaller;import javax.xml.bind.Unmarshaller;import java.io.StringReader;import java.io.StringWriter;public class JAXBContextStringToXML {public static void main(String[] args) {String xmlString = "<?xml version="1.0" encoding="UTF-8"?>"+ "<学生>"+ "<姓名>张三</姓名>"+ "<年龄>20</年龄>"+ "</学生>";JAXBContext jaxbContext =JAXBContext.newInstance(Student.class);try {// 将字符串转换为 Java 对象Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();Student student = (Student) unmarshaller.unmarshal(new StringReader(xmlString));// 将 Java 对象转换为 XML 字符串Marshaller marshaller =jaxbContext.createMarshaller();StringWriter stringWriter = new StringWriter();marshaller.marshal(student, stringWriter);System.out.println("转换后的 XML 字符串:" + stringWriter.toString());} catch (Exception e) {e.printStackTrace();}}}```在这个示例中,我们首先创建了一个名为 Student 的 Java 类,该类包含姓名和年龄两个属性。