JAXBContext返回生成XML

本文介绍了如何使用Java生成XML文档,并处理XML中的CDATA部分。通过提供具体实例,展示了如何利用JAXB库实现XML的序列化和片段化处理,同时介绍了XML实体类的定义及其在实际应用中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用java 生成XML

1,需要的包

javax.xml.bind.jar,
jaxb-api.jar,
jaxb-core.jar,
jaxb-impl.jar,
jaxb-jxc.jar,
jaxb-xjc.jar

2,XML中有<!CDATA[]]需要的包

com.springsource.javax.xml.bind-2.2.0.jar,
org.eclipse.persistence.antlr_2.3.0.v20110604-r9504.jar
org.eclipse.persistence.asm_2.3.1.v20110908-r10021.jar
org.eclipse.persistence.core_2.3.0.v20110604-r9504.jar
org.eclipse.persistence.moxy_2.3.1.v20110908-r10021.jar

用回复微信消息做实例

public String replay(UserObject text, Class classs) {
		JAXBContext context;
		String xmlObj = null;
		try {
			context = JAXBContext.newInstance(classs);
			Marshaller marshaller = context.createMarshaller(); 
			  marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
			    // 格式化XML输出,有分行和缩进
			    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
			    // 打印到控制台
			   // marshaller.marshal(text, System.out);
			    marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);//
			    ByteArrayOutputStream baos = new ByteArrayOutputStream();
			    marshaller.marshal(text, baos);
			try {
				 //  xmlObj = new String(baos.toByteArray());
				xmlObj= baos.toString("utf-8");
				//System.out.println(test);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			   
		} catch (JAXBException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		  
		 // System.out.println(xmlObj);
		  return xmlObj.replace(" standalone=\"yes\"", "");
	}

检查XML实体类

import java.util.Calendar;
import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="xml")
@XmlAccessorType(XmlAccessType.FIELD)
public class NewsObject extends UserObject{
	public NewsObject(){
		super.setMsgType("news");
		super.setCreateTime(Calendar.getInstance().getTimeInMillis());
	}
	int ArticleCount;
	 @XmlElementWrapper(name="Articles") 
	 @XmlElement(name="item") 
	List<NewsItem> NewsItems;
	
	
	public List<NewsItem> getNewsItems() {
		return NewsItems;
	}
	public void setNewsItems(List<NewsItem> newsItems) {
		NewsItems = newsItems;
	}
	public int getArticleCount() {
		return ArticleCount;
	}
	public void setArticleCount(int articleCount) {
		ArticleCount = articleCount;
	}
	
}

为了生成CDATA 需要一个 jaxb.properties 文件 需要和需要生成的java类放在同一个目录 javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

转载于:https://my.oschina.net/u/1380675/blog/550359

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值