java对象转换为xml格式字符串
2016-10-28 00:00
134 查看
摘要: java对象转xml格式字符串,及xml字符串处理(4.过滤 standalone="yes",将xml元素标签转为大写,获取xml元素标签内容)
java类:javax.xml.bind.JAXBContext
它提供了管理实现 JAXB 绑定框架操作所需的 XML/Java 绑定信息的抽象,这些操作包括:解组、编组和验证。
1.编写工具类
2.为pojo简单java对象添加注解
2.1 xml顶级元素
2.2 xml顶级元素,继承2.1
2.3 xml元素标签,包含其他元素标签
3.测试代码及运行结果
测试代码
结果
4.附加操作
4.1 过滤 standalone="yes"
4.2 将xml元素标签转为大写
4.3 获取xml元素标签内容
4.3.1 xml元素标签唯一
4.3.1 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> T convertToJavaBean(String xml, Class<T> 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.使用默认的顶级标签元素<Request><Request/>:直接创建该类对象; * 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<String> 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);
结果
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!-- 顶级元素为DataRequestPacket的@XmlRootElement注解值 --> <DATARequest> <!-- 默认为属性(字段)名 --> <msgBody> <!-- 这里对照pojo一看就懂了 --> <CONDITIONLIST> <CONDITION>condition_1</CONDITION> <CONDITION>condition_2</CONDITION> </CONDITIONLIST> <!-- @XmlElement注解 --> <DATALIST></DATALIST> <!-- config值为null,不对其进行转换 --> </msgBody> </DATARequest>
4.附加操作
4.1 过滤 standalone="yes"
xmlStr.replaceFirst(" standalone=\"yes\"", "")
4.2 将xml元素标签转为大写
String regex = "<(/*[A-Za-z]+)>"; Matcher matcher = Pattern.compile(regex).matcher(xmlStr); StringBuffer sb = new StringBuffer(); while (matcher.find()) { matcher.appendReplacement(sb, "<" + matcher.group(1).toUpperCase() + ">"); } matcher.appendTail(sb); sb.toString();
4.3 获取xml元素标签内容
4.3.1 xml元素标签唯一
/** * 获取xml字符串中元素标签值 * <p>xml中元素标签唯一</p> * * @param responseXml 响应报文(xml字符串格式) * @param element 元素名(不区分大小写) * @return * @throws Exception */ public static String getXmlSingleElementValue(String responseXml, String element) { //元素名大写<ELEMENT>(.*)<ELEMENT/> StringBuffer regex = new StringBuffer(); regex.append("<").append(element.toUpperCase()).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字符串中元素标签值 * <p>xml存在多个该元素标签</p> * <p>exmple:<DATA></DATA></p> * * @param responseXml 响应报文(xml字符串格式) * @param element 元素名(不区分大小写) * @return * @throws Exception */ public static List<String> getXmlListElementValue(String responseXml, String element) { List<String> list = new ArrayList<String>(); //元素名大写<ELEMENT>([^</ELEMENT>]*)</ELEMENT> StringBuffer regex = new StringBuffer(); regex.append("<").append(element.toUpperCase()).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; }
相关文章推荐
- java中使用XStream实现将对象转为xml格式字符串或者将xml格式的字符串转换为对象==
- java对象转换为xml格式字符串
- java对象与xml格式字符串的转换
- java中使用XStream实现将对象转为xml格式字符串或者将xml格式的字符串转换为对象==
- java中使用XStream实现将对象转为xml格式字符串或者将xml格式的字符串转换为对象
- JAVA对象转换为XML格式
- JSON字符串转换JAVA对象例子。
- java对象直接转换成xml格式!
- JSON(2):如何将一个java对象转换为一个符合json语法的字符串
- gson(JSON字符串转换成一个相等的Java对象)
- java对象与xml格式之间的转换
- Json字符串与Java对象间的转换
- Java解析XML格式字符串返回Document类型对象(2009-05-01 04:33:26)转载标签:javaxmldocument杂谈 分类:软件,网络
- 将java对象转换成json字符串
- 使用json-lib将java对象转换成json字符串
- JSON 字符串 与 java 对象的转换
- 将JAVA对象转换成JSON字符串
- JSON字符串与Java对象之间的转换
- java中把对象、对象bean、list集合、对象数组、Map和Set以及字符串转换成Json
- 将Fri May 04 17:25:34 CST 2012形式的日期字符串转换成java.util.Date对象的方法