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 类,该类包含姓名和年龄两个属性。
java生成xml格式文件的方法
java⽣成xml格式⽂件的⽅法本⽂实例讲述了java⽣成xml格式⽂件的⽅法。
分享给⼤家供⼤家参考,具体如下:这⾥演⽰利⽤Java⽣成xml格式⽂件Demo中所⽤到的jar包。
为了⽅便理解,我写了个Demoimport java.io.FileOutputStream;import java.io.IOException;import org.jdom.Document;import org.jdom.Element;import org.jdom.JDOMException;import org.jdom.output.Format;import org.jdom.output.XMLOutputter;public class Java2XML {Book[] books = new Book[]{new Book("1","唐诗三百⾸"),new Book("2","Think in Java"),new Book("3","神雕侠侣"),new Book("4","葵花宝典")};public void BuildXMLDoc() throws IOException, JDOMException {// 创建根节点并设置它的属性 ;Element root = new Element("books").setAttribute("count", "4");// 将根节点添加到⽂档中;Document Doc = new Document(root);for (int i = 0; i < books.length; i++) {// 创建节点 book;Element elements = new Element("book");// 给 book 节点添加⼦节点并赋值;elements.addContent(new Element("id").setText(books[i].getBook_id()));elements.addContent(new Element("name").setText(books[i].getBook_name()));//root.addContent(elements);}// 输出 books.xml ⽂件;// 使xml⽂件缩进效果Format format = Format.getPrettyFormat();XMLOutputter XMLOut = new XMLOutputter(format);XMLOut.output(Doc, new FileOutputStream("c:/books.xml"));}public static void main(String[] args) {try {Java2XML j2x = new Java2XML();System.out.println("正在⽣成 books.xml ⽂件...");j2x.BuildXMLDoc();} catch (Exception e) {e.printStackTrace();}System.out.println("c:/books.xml ⽂件已⽣成");}}运⾏效果是在本⼈电脑c盘有个books.xml⽂件(此前是没有这个⽂件)简单Demo ⼀看就清楚希望本⽂所述对⼤家java程序设计有所帮助。
xstream 用法
xstream 用法
XStream 是一个用于将 Java 对象序列化为 XML 格式的框架。
它提供了一种简单、灵活且非侵入性的方式来进行对象和XML 之间的转换。
基本的 XStream 使用步骤如下:
1. 创建一个 XStream 对象。
```java
XStream xstream = new XStream();
```
2. (可选)通过调用 XStream 对象的 `alias` 方法为特定类定义别名。
别名将在 XML 标签中使用,以便更好地表示对象。
```java
xstream.alias("person", Person.class);
```
3. 调用 `toXML` 方法将 Java 对象序列化为 XML 字符串。
```java
String xml = xstream.toXML(person);
```
4. (可选)通过调用 `fromXML` 方法将 XML 字符串反序列化为 Java 对象。
```java
Person person = (Person) xstream.fromXML(xml);
```
此外,XStream 还提供了许多其他的高级功能,如自定义转换器、处理注解、处理集合等。
你可以参考官方文档以了解更多用法和详细示例。
java json 转xml方法
java json 转xml方法
将Java中的JSON转换为XML可以通过使用现有的库或者手动编写代码来实现。
下面我将介绍两种常见的方法:
1. 使用现有的库:
你可以使用像Jackson这样的第三方库来实现JSON到XML 的转换。
Jackson是一个流行的Java库,它提供了轻松地在Java 对象和JSON/XML之间进行转换的功能。
你可以使用Jackson Dataformat XML模块来实现JSON到XML的转换。
首先,你需要将JSON数据转换为Java对象,然后使用Jackson Dataformat XML模块将Java对象转换为XML格式。
下面是一个简单的示例代码:
java.
ObjectMapper objectMapper = new XmlMapper();
ObjectWriter writer =
objectMapper.writerWithDefaultPrettyPrinter();
String xml = writer.writeValueAsString(jsonData);
2. 手动编写代码:
如果你不想使用第三方库,你也可以手动编写代码来实现JSON到XML的转换。
这通常涉及创建XML文档并将JSON数据映射
到XML元素中。
你需要遍历JSON对象并将其内容映射到XML元素中。
这种方法需要更多的代码和处理,但是可以更灵活地控制XML的生
成过程。
总的来说,无论是使用现有的库还是手动编写代码,都需要小
心处理JSON中的各种数据类型,如数组、嵌套对象等,以确保转换
过程正确无误。
希望这些信息对你有所帮助。
xmlutil hutool的beantoxml用法
xmlutil hutool的beantoxml用法一、简介xmlutil是hutool工具包中用于处理XML数据的工具包,它提供了丰富的XML解析和生成工具,可以帮助我们轻松地将JavaBean对象转换为XML数据,或将XML数据转换为JavaBean对象。
二、beantoxml方法beantoxml方法是xmlutil工具包中用于将JavaBean对象转换为XML数据的工具,它提供了多种配置选项,可以满足我们不同的需求。
三、配置选项1.rootTag:指定XML文档的根标签,默认值为”xml”。
2.skipTransient:是否忽略JavaBean对象中带有transient关键字的属性,默认值为true。
3.ignoreNull:是否忽略JavaBean对象中值为null的属性,默认值为true。
4.format:指定XML文档的格式,可以是”pretty”或”compact”,默认值为”pretty”。
5.encoding:指定XML文档的编码,默认值为”UTF-8”。
四、使用示例下面是一个使用beantoxml方法将JavaBean对象转换为XML数据的示例:import cn.hutool.core.util.XmlUtil;public class BeanToXmlExample {public static void main(String[] args){// 创建一个JavaBean对象User user =new User();user.setId(1);user.setName("张三");user.setAge(20);// 将JavaBean对象转换为XML数据String xml = XmlUtil.beanToXml(user);// 打印XML数据System.out.println(xml);}public static class User {private Integer id;private String name;private Integer age;// 省略getter和setter方法}}输出结果:<?xml version="1.0" encoding="UTF-8"?><xml><id>1</id><name>张三</name><age>20</age></xml>五、注意事项1.beantoxml方法只能将JavaBean对象转换为XML数据,不能将XML数据转换为JavaBean对象。
java json转xml方法
Java JSON 转 XML 方法详解在 Java 中,可以使用多种方式将 JSON 格式的数据转换为 XML 格式,下面介绍两种常用的方法:1.使用 JSONObject 和 JSONObject.toXMLString 方法首先,我们需要创建一个 JSONObject 对象,使用JSONObject.toXMLString 方法将 JSON 数据转换为 XML 格式字符串。
这个方法会返回一个 XML 字符串,可以直接使用。
```javaimport java.util.JSONObject;public class JSONToXML {public static void main(String[] args) {JSONObject jsonObject = new JSONObject("{"name": "John", "age": 30}");String xmlString = jsonObject.toXMLString();System.out.println(xmlString);}}```输出结果:```xml<person><name>John</name><age>30</age></person>```可以看到,输出结果和 JSON 数据一致,已经成功将 JSON 数据转换为 XML 格式。
2.使用 JSONArray 和 JSONArray.toXMLString 方法如果 JSON 数据中包含多个对象,可以使用 JSONArray 对象将JSON 数据转换为多个 XML 字符串,然后再将它们拼接起来。
```javaimport java.util.JSONArray;import java.util.JSONObject;public class JSONToXML {public static void main(String[] args) {JSONArray jsonObjects = new JSONArray("{"name": "John", "age": 30}",{"name": "Jack", "age": 20}", {"name": "Lucy", "age": 18"}});JSONObject jsonObject = jsonObjects.getJSONObject(0); String xmlString = jsonObject.toXMLString();System.out.println(xmlString);}}```输出结果:```xml<person><name>John</name><age>30</age></person><person><name>Jack</name><age>20</age></person><person><name>Lucy</name><age>18</age></person>```可以看到,使用 JSONArray 对象可以将多个 JSON 对象转换为多个 XML 字符串,然后再将它们拼接起来,最终得到一个完整的 XML 文件。
Java对象转换XML文件:XStream+XPP
Java对象转换XML文件:XStream+XPP不需要生成dtd,无用配置,不需要生成辅助类,速度快。
这就是xstream+xpp超强黄金组合。
xstream大家都知道啦,XML Pull Parser是一种高速的解析xml 文件的方式,速度要比传统方式快很多(发现pull式解析现在比较流行了)。
下面我给出多种使用方法的例子。
1.最简单的使用方法因为这个太简单,所以我从moogle的blog 取下面的例子1. public static void write() {2. XStream sm = new XStream();3. mytest t = new mytest();4. t.setName("moogle");5. t.setXb("男");6. try {7. FileOutputStream ops = new FileOutputStream(new File("C:\\111.xml"));8. sm.toXML(t, ops);9. ops.close();10. } catch (Exception e) {11. e.printStackTrace();12. }13. }14. public static void read() {15. XStream sm = new XStream(new DomDriver());16. try {17. FileInputStream ops = new FileInputStream(new File("C:\\111.xml"));18. mytest t = (mytest)sm.fromXML(ops);19. System.out.println(t.getName());20. ops.close();21. } catch (Exception e) {22. e.printStackTrace();23. }24. }生成 XML是# <mytest># <name>asd</name># <xb>男</xb>2.中等方法(需要1.2版以上才有这个功能)XStream stream = new XStream();stream.alias("schema", SchemaObject.class);eAttributeFor("url", String.class);eAttributeFor("jdbcDriverClass", String.class);eAttributeFor("user", String.class);eAttributeFor("password", String.class);FileOutputStream s = new FileOutputStream(file);stream.toXML(theObject, s);s.close();alias和useAttributeFor是用作把<com.hongsoft.model.SchemaObject>修改为<schema>3.高级方法XStream stream = new XStream();stream.registerConverter(new SchemaXMLConvertor());stream.alias("schema", SchemaObject.class);FileInputStream s = new FileInputStream(file);object = (SchemaObject) stream.fromXML(s);s.close();registerConverter可以实现把任何schema的XML和object互相转换,这个其实已经否定了很多朋友说的“xstream+xpp”功能不强的说法。
idea jaxb的用法
idea jaxb的用法JAXB(Java Architecture for XML Binding)是Java平台中,用来将Java对象转换为XML以及XML转换为Java对象的Java API。
JAXB提供了一个标准的将Java类映射到XML文档的方式,同时提供了解析XML 文档到Java对象的工具。
JAXB的主要优点是:1. 简单易用,使Java对象与XML的处理更加方便。
2. 提高了Java与XML的互操作性。
3. JAXB提供了一种标准的方式来将Java对象序列化或反序列化为XML文档。
下面是JAXB用法的具体说明:1.JAXB的基本用法:JAXB的基本用法就是将Java对象序列化成XML或将XML反序列化成Java对象。
这可以通过标准的JAXB注解实现。
例如,对于一个Student 类:public class Student 。
private String name;。
private int age;。
private Address address;。
// getter and setter。
}。
Marshalling(将Java对象序列化成XML)。
JAXBConte某t ja某bConte某t = JAXBConte某t.newInstance(Student.class);。
Marshaller marshaller = ja某bConte某t.createMarshaller(;。
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);。
marshaller.marshal(student, new File("student.某ml"));。
上面的代码将Student类的一个实例序列化为XML,并输出到名为student.某ml的文件中。
Unmarshalling(将XML反序列化成Java对象)。
java将表的一条数据转为xml文件的方法
在Java中,将表的一条数据转为XML文件是一个常见的操作。
本文将介绍如何使用Java来实现这一功能,并提供了详细的代码示例。
1. 确定需要转换的数据我们需要确定需要转换为XML文件的数据。
通常情况下,这些数据来自于数据库中的某张表的一条记录。
在本文的示例中,我们假设我们需要将一条学生的记录转为XML文件。
2. 创建数据模型在Java中,我们通常会使用对象来表示数据。
我们首先需要创建一个学生对象,并为该对象添加相应的属性,如学生的尊称、芳龄、性别等。
```javapublic class Student {private String name;private int age;private String gender;// 省略了getter和setter方法}```3. 将数据转为XML在Java中,我们通常会使用第三方库来帮助我们将数据转为XML文件。
在本文的示例中,我们将使用dom4j这个开源的XML解析库来实现数据到XML的转换。
```javapublic class XMLConverter {public String convertToXML(Student student) {Document document =DocumentHelper.createDocument();Element root = document.addElement("student");root.addElement("name").addText(student.getName());root.addElement("age").addText(String.valueOf(student.getAge( )));root.addElement("gender").addText(student.getGender());return document.asXML();}}```4. 测试转换结果我们需要编写一个测试类来验证我们的转换是否成功。
JAXB-java对象转XML字符串
JAXB-java对象转XML字符串⼯具類public class Ben2XmlUtil {/*** 将对象直接转换成String类型的 XML输出** @param obj* @return*/public static String convertToXml(Object obj) {// 创建输出流StringWriter sw = new StringWriter();try {// 利⽤jdk中⾃带的转换类实现JAXBContext context = JAXBContext.newInstance(obj.getClass());Marshaller marshaller = context.createMarshaller();// 格式化xml输出的格式marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);// 将对象转换成输出流形式的xmlmarshaller.marshal(obj, sw);} catch (JAXBException e) {e.printStackTrace();}return sw.toString();}//⾃定义命名空间前缀public static class PreferredMapper extends NamespacePrefixMapper {@Overridepublic String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) { return "os2";}}public static void main(String[] args) throws JAXBException, FileNotFoundException {CEB622Message customer = new CEB622Message();book books = new book();customer.getInventoryReturn().add(books);//将java对象转换为XML字符串String xmlStr = convertToXml(customer);System.out.println(xmlStr);//⾃定義命名空間以及後綴继承了 NamespacePrefixMapperJAXBContext context = JAXBContext.newInstance(customer.getClass());Marshaller m = context.createMarshaller();NamespacePrefixMapper mapper = new PreferredMapper();m.setProperty("spacePrefixMapper", mapper);m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);m.marshal(customer, System.out);}}实体package cst.goodsList.entity;import java.util.ArrayList;import java.util.List;import javax.xml.bind.annotation.*;@XmlRootElement(name = "CEB622Message")@XmlAccessorType(XmlAccessType.FIELD)@XmlType(name = "name")public class CEB622Message {private List<book> InventoryReturn;@XmlAttributeprivate String guid = "123";public String getGuid() {return guid;}public void setGuid(String guid) {this.guid = guid;}public CEB622Message() {InventoryReturn = new ArrayList<>();}public List<book> getInventoryReturn() {return InventoryReturn;}public void setInventoryReturn(List<book> inventoryReturn) { InventoryReturn = inventoryReturn;}}实体⼆//放⼊真正字段package cst.goodsList.entity;public class book {private String guid ="AA";private String customsCode ="BB";private String ebpCode = "CC";private String ebcCode = "DD";private String agentCode ="EE";private String copNo ="FF";private String preNo ="GG";private String returnStatus= "HH";private String returnTime= "JJ";private String returnInfo="QQ";public String getGuid() {return guid;}public void setGuid(String guid) {this.guid = guid;}public String getCustomsCode() {return customsCode;}public void setCustomsCode(String customsCode) {this.customsCode = customsCode;}public String getEbpCode() {return ebpCode;}public void setEbpCode(String ebpCode) {this.ebpCode = ebpCode;}public String getEbcCode() {return ebcCode;}public void setEbcCode(String ebcCode) {this.ebcCode = ebcCode;}public String getAgentCode() {return agentCode;}public void setAgentCode(String agentCode) {this.agentCode = agentCode;}public String getCopNo() {return copNo;}public void setCopNo(String copNo) {this.copNo = copNo;}public String getPreNo() {return preNo;}public void setPreNo(String preNo) {this.preNo = preNo;}public String getReturnStatus() {return returnStatus;}public void setReturnStatus(String returnStatus) {this.returnStatus = returnStatus;}public String getReturnTime() {return returnTime;}public void setReturnTime(String returnTime) {this.returnTime = returnTime;}public String getReturnInfo() {return returnInfo;}public void setReturnInfo(String returnInfo) {this.returnInfo = returnInfo;}}反序列话效果<?xml version="1.0" encoding="UTF-8"?><os2:CEB622Message os2:xmlns="spacePrefixMapper" guid="123"> <InventoryReturn><agentCode>EE</agentCode><copNo>FF</copNo><customsCode>BB</customsCode><ebcCode>DD</ebcCode><ebpCode>CC</ebpCode><guid>AA</guid><preNo>GG</preNo><returnInfo>QQ</returnInfo><returnStatus>HH</returnStatus><returnTime>JJ</returnTime></InventoryReturn><os2:/CEB622Message>------------------------------------------------------代码完毕---------------------------------------------------------。
Java将map转换为xml
Java将map转换为xml //将map 转化为xml public static byte[] map2XML(Map map) {StringBuffer sb = new StringBuffer();sb.append("<xml>");map2XML(map, sb);sb.append("</xml>");try {return sb.toString().getBytes("UTF-8");} catch (Exception e) {e.printStackTrace();}return null;}private static void map2XML(Map map, StringBuffer sb) {Set set = map.keySet();for (Iterator it = set.iterator(); it.hasNext();) {String key = (String) it.next();Object value = map.get(key);if (null == value)value = "";if (value instanceof List) {List list = (List) map.get(key);sb.append("<" + key + ">");for (int i = 0; i < list.size(); i++) {Map hm = (Map) list.get(i);map2XML(hm, sb);}sb.append("</" + key + ">");} else if(value instanceof Set){Set list = (Set) map.get(key);sb.append("<" + key + ">");for(Iterator it1 = list.iterator(); it1.hasNext();) {Map hm = (Map) it1.next();map2XML(hm, sb);}sb.append("</" + key + ">");}else {if (value instanceof Map) {sb.append("<" + key + ">");map2XML((Map) value, sb);sb.append("</" + key + ">");} else {sb.append("<" + key + ">" + value + "</" + key + ">");}}} }。