XStream将java对象解析为xml字符串时,过滤掉节点值为空的节点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XStream将java对象解析为xml字符串时,过滤掉节点值为空的节点相关的知识,希望对你有一定的参考价值。

用XStream将java对象解析为xml字符串时,当java对象的某个字段为空(null或者"")时,则忽略该字段,最终的xml字符串没有此节点。
比如说Student有三个字段,id,name,sex。
当id=1,name=“独孤求败”,sex=“男”时,转换后的xml为:
<student>
<id>1</id>
<name>独孤求败</name>
<sex>男</男>
当id=1,name=“”,sex=“男”时,转换后的xml为:
<student>
<id>1</id>
<sex>男</男>
</student>
此时是没有name节点的,这种效果该怎么实现,或者需要设置xstream对象的哪个属性?

参考技术A 使用注解 @XStreamOmitField 或者omitField(definedIn, fieldName)即可

XStream解析xml格式的字符串的方法

ProcessStatusUploadRootList processStatusUploadRootList = null;
try {
XStream xStream = new XStream();
xStream.alias("Root", ProcessStatusUploadRootList.class);
xStream.alias("Header", ProcessStatusUploadHeader.class);
xStream.alias("ProcessStatusUploadBody", ProcessStatusUploadBody.class);
processStatusUploadRootList = (ProcessStatusUploadRootList) xStream.fromXML(friRecipeStatusInfoXml);
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
return "<status>-ERROR</status><msg>信息字符串不合法</msg>";
}

上面是我原来的一段代码,在tomcat中运行是没有问题的,但是当我在debug模式下测试代码的情况下,走到  xStream 按照指定的数据格式进行解析xml格式的字符串的时候=> (ProcessStatusUploadRootList) xStream.fromXML(friRecipeStatusInfoXml);

抛出异常:

(main:) XPP3 pull parser library not present. Specify another driver. For example: new XStream(new DomDriver())

这个问题起初也困扰了我一段时间,后来经过揣测和网上搜索,得到解决方法。

由于是在debug模式下单独测试该方法,根据提示的错误信息,推断xStream 没有指定一个驱动解析器(driver),指定驱动之后的代码如下:

ProcessStatusUploadRootList processStatusUploadRootList = null;

try {
XStream xStream = new XStream(new DomDriver());//构造一个指定的解析器new DomDriver()
xStream.alias("Root", ProcessStatusUploadRootList.class);
xStream.alias("Header", ProcessStatusUploadHeader.class);
xStream.alias("ProcessStatusUploadBody", ProcessStatusUploadBody.class);
processStatusUploadRootList = (ProcessStatusUploadRootList) xStream.fromXML(friRecipeStatusInfoXml);
} catch (Exception e) {
logger.error(e.getMessage());
e.printStackTrace();
return "<status>-ERROR</status><msg>信息字符串不合法</msg>";
}

重新debug测试程序,不再抛出异常!

关于XStream更多序列化的方法解说,请查看链接:http://www.cnblogs.com/LiZhiW/p/4313493.html

以上是关于XStream将java对象解析为xml字符串时,过滤掉节点值为空的节点的主要内容,如果未能解决你的问题,请参考以下文章

xStream转换xml同名节点到java对象问题

微信公众号xml数据解析之xstream

在 Java 中使用 xstream 转换为 xml 时如何避免大双精度数的科学记数法

XStream解析XML文本并用反射机制转换为对象

Xstream将XML转换为javabean的问题

使用XStream是实现XML与Java对象的转换--Object Stream