java对象转xml字符串_java对象转换为xml格式字符串

java类:javax.xml.bind.JAXBContext

它提供了管理实现 JAXB 绑定框架操作所需的 XML/Java 绑定信息的抽象,这些操作包括:解组、编组和验证。

1.编写工具类

/**

* Jaxb工具类

*

* @author LittleNewbie

* @date 2016年10月11日

*/

public class JaxbUtil {

public static final String DEFAULT_ENCODING = "UTF-8";

/**

* pojo转换成xml 默认编码UTF-8

*

* @param obj 待转化的对象

* @return xml格式字符串

* @throws Exception JAXBException

*/

public static String convertToXml(Object obj) throws Exception {

return convertToXml(obj, DEFAULT_ENCODING);

}

/**

* pojo转换成xml

*

* @param obj 待转化的对象

* @param encoding 编码

* @return xml格式字符串

* @throws Exception JAXBException

*/

public static String convertToXml(Object obj, String encoding) throws Exception {

String result = null;

JAXBContext context = JAXBContext.newInstance(obj.getClass());

Marshaller marshaller = context.createMarshaller();

// 指定是否使用换行和缩排对已编组 XML 数据进行格式化的属性名称。

marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);

StringWriter writer = new StringWriter();

marshaller.marshal(obj, writer);

result = writer.toString();

return result;

}

/**

* xml转换成JavaBean

*

* @param xml xml格式字符串

* @param t 待转化的对象

* @return 转化后的对象

* @throws Exception JAXBException

*/

@SuppressWarnings("unchecked")

public static T convertToJavaBean(String xml, Class t) throws Exception {

T obj = null;

JAXBContext context = JAXBContext.newInstance(t);

Unmarshaller unmarshaller = context.createUnmarshaller();

obj = (T) unmarshaller.unmarshal(new StringReader(xml));

return obj;

}

}

2.为pojo简单java对象添加注解

2.1 xml顶级元素

/**

* 请求报文基础类

* 请求报文的实现方式:

* 1.使用默认的顶级标签元素:直接创建该类对象;

* 2.使用其他顶级标签元素:继承该类,并添加注解@XmlRootElement(name = "rootName") rootName区分大小写

*

* @author LittleNewbie

* @date 2016年10月11日

*/

//类中的每个非静态、非瞬态字段将会自动绑定到 XML,除非由 XmlTransient 注释

@XmlAccessorType(XmlAccessType.FIELD)

//xml顶级元素标签

@XmlRootElement(name = "Request")

public class RequestPacket {

/**

* 请求包体消息

*/

private MsgBody msgBody;

public RequestPacket() {

}

//getter setter...

}

2.2 xml顶级元素,继承2.1

/**

* 数据请求报文-根节点

* @author LittleNewbie

* @date 2016年10月11日

*

*/

@XmlRootElement(name = "DATARequest")

public class DataRequestPacket extends RequestPacket {

public DataRequestPacket() {

}

}

2.3 xml元素标签,包含其他元素标签

/**

* 请求包体消息

* @author LittleNewbie

* @date 2016年10月11日

*

*/

@XmlAccessorType(XmlAccessType.FIELD)

public class MsgBody {

@XmlElementWrapper(name = "CONDITIONLIST")

@XmlElement(name = "CONDITION")

private List conditionList;

/**

* 如果不添加XmlElement注解,默认以属性名生成xml元素标签

*/

@XmlElement(name = "DATALIST")

private String dataList;

private String config;

public MsgBody() {

}

//getter setter...

}

3.测试代码及运行结果

测试代码

RequestPacket root = new DataRequestPacket();

MsgBody body = new MsgBody();

String[] conditions = { "condition_1", "condition_2" };

body.setConditionList(Arrays.asList(conditions));

body.setDataList("");

//这里不设置config值,属性值为null,将不会转为xml标签

//body.setConfig("");

root.setMsgBody(body);

String xmlStr = JaxbUtil.convertToXml(root);

System.out.println(xmlStr);

结果

condition_1

condition_2

4.附加操作

4.1 过滤 standalone="yes"

xmlStr.replaceFirst(" standalone=\"yes\"", "")

4.2 将xml元素标签转为大写

String regex = "";

Matcher matcher = Pattern.compile(regex).matcher(xmlStr);

StringBuffer sb = new StringBuffer();

while (matcher.find()) {

matcher.appendReplacement(sb, "");

}

matcher.appendTail(sb);

sb.toString();

4.3 获取xml元素标签内容

4.3.1 xml元素标签唯一

/**

* 获取xml字符串中元素标签值

*

xml中元素标签唯一

*

* @param responseXml 响应报文(xml字符串格式)

* @param element 元素名(不区分大小写)

* @return

* @throws Exception

*/

public static String getXmlSingleElementValue(String responseXml, String element) {

//元素名大写(.*)

StringBuffer regex = new StringBuffer();

regex.append("");

regex.append("(.*)");

regex.append("").append(element.toUpperCase()).append(">");

String str = "";

Matcher matcher = Pattern.compile(regex.toString()).matcher(responseXml);

while (matcher.find()) {

str = matcher.group(1);

}

return str;

}

4.3.1 xml元素标签不唯一(存在多个)

/**

* 获取xml字符串中元素标签值

*

xml存在多个该元素标签

*

exmple:

*

* @param responseXml 响应报文(xml字符串格式)

* @param element 元素名(不区分大小写)

* @return

* @throws Exception

*/

public static List getXmlListElementValue(String responseXml, String element) {

List list = new ArrayList();

//元素名大写([^]*)

StringBuffer regex = new StringBuffer();

regex.append("");

regex.append("([^" + element.toUpperCase() + ">]*)");

regex.append("").append(element.toUpperCase()).append(">");

Matcher matcher = Pattern.compile(regex.toString()).matcher(responseXml);

while (matcher.find()) {

list.add(matcher.group(1));

}

return list;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值