XStream的简单使用
2017-12-27 10:29
363 查看
本文主要介绍了常用的XML节点与Java Bean之间的映射。
主要文件有,XML字符串,XML对应的JavaBean,XmlUtils.java ,XStreamEx.java(该类用于解决Xml存在节点,而JavaBBean中不存在就会报错的情况)
所需要的依赖
1.XML字符串
2.XML对应的Java Bean(省略get/set方法) TestBean.java
3.XmlUtils.java
4.XSteamEx.java
5.XmlUtils的使用
XML------>Java Bean
Java Bean------&
4000
gt;XML
主要文件有,XML字符串,XML对应的JavaBean,XmlUtils.java ,XStreamEx.java(该类用于解决Xml存在节点,而JavaBBean中不存在就会报错的情况)
所需要的依赖
<dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream</artifactId> <version>1.4.7</version> </dependency>
<!--XmlUtils使用到该包的类--> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.3</version> </dependency>
1.XML字符串
<?xml version="1.0" ?> <siiscmd xmlns="http://www.aisino.sh.cn"> <issueinv> <invrecord> <invrecordhead> <machinetaxnr>31010105298235X</machinetaxnr> <machinenr>0</machinenr> <invkind> <value>0</value> </invkind> <docnr>910000370</docnr> </invrecordhead> <invrecorditem> <prodnr>10023</prodnr> </invrecorditem> <invrecorditem> <prodnr>10024</prodnr> </invrecorditem> </invrecord> </issueinv> </siiscmd>
2.XML对应的Java Bean(省略get/set方法) TestBean.java
@XStreamAlias("siiscmd") public class TestBean { @XStreamAsAttribute private String xmlns = "http://www.aisino.sh.cn"; @XStreamAlias("issueinv") private Issueinv issueinv; class Issueinv{ @XStreamAlias("invrecord") private Invrecord invrecord; } class Invrecord { @XStreamAlias("invrecordhead") private Invrecordhead invrecordhead; @XStreamImplicit(itemFieldName = "invrecorditem") private List<Invrecorditem> invrecorditemList; } class Invrecordhead{ @XStreamAlias("machinetaxnr") private String machinetaxnr; @XStreamAlias("machinenr") private String machinenr; @XStreamAlias("invkind") private Invkind invkind; @XStreamAlias("docnr") private String docnr; } class Invrecorditem{ @XStreamAlias("prodnr") private String prodnr; } class Invkind{ @XStreamAlias("value") private String value; } }
3.XmlUtils.java
import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.core.util.QuickWriter; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; import com.thoughtworks.xstream.io.xml.CompactWriter; import com.thoughtworks.xstream.io.xml.DomDriver; import com.thoughtworks.xstream.io.xml.PrettyPrintWriter; import com.thoughtworks.xstream.io.xml.XppDriver; import org.apache.commons.lang.StringEscapeUtils; import java.io.StringWriter; import java.io.Writer; /** * Xml解析工具类 * Created by zx on 2017/11/14 15:54 */ public class XmlUtils { //xstream扩展 private static XStream xstream = new XStream(new XppDriver() { public HierarchicalStreamWriter createWriter(Writer out) { return new PrettyPrintWriter(out) { // 对所有xml节点都增加CDATA标记 boolean cdata = true; public void startNode(String name, Class clazz) { super.startNode(name, clazz); } protected void writeText(QuickWriter writer, String text) { if (cdata) { writer.write("<![CDATA["); writer.write(text); writer.write("]]>"); } else { writer.write(text); } } }; } }); /** * 生成压缩的xml字符串 * @param obj * @return */ public static String toXml(Object obj) { XStream xstream = new XStream(new DomDriver("utf8")); xstream.processAnnotations(obj.getClass()); // 识别obj类中的注解 // 以压缩的方式输出XML StringWriter sw = new StringWriter(); xstream.marshal(obj, new CompactWriter(sw)); return sw.toString(); // 以格式化的方式输出XML //return xstream.toXML(obj); } /** * 带有头信息的xml字符串 * @param obj * @return */ public static String toXmlWithHeader(Object obj) { String header = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"; XStream xstream = new XStream(new DomDriver("utf8")); xstream.processAnnotations(obj.getClass()); // 识别obj类中的注解 // 以压缩的方式输出XML StringWriter sw = new StringWriter(); xstream.marshal(obj, new CompactWriter(sw)); return header+sw.toString(); // 以格式化的方式输出XML //return xstream.toXML(obj); } /** * 带有头信息的xml字符串 * @param obj * @return */ public static String toXmlWithHeaderUnescapeXml(Object obj) { String header = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"; XStream xstream = new XStream(new DomDriver("utf8")); xstream.processAnnotations(obj.getClass()); // 识别obj类中的注解 // 以压缩的方式输出XML StringWriter sw = new StringWriter(); xstream.marshal(obj, new CompactWriter(sw)); return StringEscapeUtils.unescapeXml(header+sw.toString()); // 以格式化的方式输出XML //return xstream.toXML(obj); } /** * 将xml字符串映射称对象 * @param xmlStr * @param cls * @param <T> * @return */ public static <T> T toBean(String xmlStr, Class<T> cls) { XStream xstream = new XStreamEx(new DomDriver()); xstream.processAnnotations(cls); @SuppressWarnings("unchecked") T t = (T) xstream.fromXML(xmlStr); return t; } }
4.XSteamEx.java
import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.DomDriver; import com.thoughtworks.xstream.mapper.MapperWrapper; /** * 忽略xml中存在节点,而model中不存在,就会报错. * Created by zx on 2017/11/24 16:35 */ public class XStreamEx extends XStream { public XStreamEx(DomDriver domDriver) { super(domDriver); } @Override protected MapperWrapper wrapMapper(MapperWrapper next) { return new MapperWrapper(next) { @Override public boolean shouldSerializeMember(@SuppressWarnings("rawtypes") Class definedIn, String fieldName) { if (definedIn == Object.class) { return false; } return super.shouldSerializeMember(definedIn, fieldName); } }; } }
5.XmlUtils的使用
XML------>Java Bean
String xml = "xml字符串...."; TestBean testBean = XmlUtils.toBean(xml, TestBean.class);
Java Bean------&
4000
gt;XML
TestBean bean = new TestBean(); //bean.set.....; String xml = XmlUtils.toXmlWithHeader(bean);
相关文章推荐
- xStream 的简单使用 xml to bean
- 简单使用XStream
- XStream简单使用01——xml和Ojbect互转
- XStream简单使用
- Xstream的简单使用
- java中解析复杂xml(XStream简单使用)
- xstream的简单使用
- android中解析复杂xml(XStream简单使用)
- xStream 的简单使用 xml to bean
- XStream的简单使用
- XStream的简单使用
- XStream的使用方法、简单使用方法、xml的解析方法
- 抽象类Abstract的简单使用
- [chrome/chromium]插件 vimium 简单使用
- mysql简单使用
- hadoop使用java多文件上传简单demo
- 实用的简单PHP分页集合包括使用方法
- 使用python多线程实现一个简单spider
- PS简单使用
- ajax的入门简单使用