如何把Object对象转换为XML
从截图可以看出以上转换有两个问题:
(1).转换为无XML的定义头语句,即:<?xml version="1.0" encoding="UTF-8"?>
(2).msg_head和msg_content标签重复了一次
?
另外,需增加一个功能,把转换的xml以字符串的形式输出,在实际的系统交互中,也是传字符串而非文件。
?
由于时间的关系,今天就不调试了,明天有时间再调,也希望朋友们多提提意见,good luck.....
?
解决前面的两个问题(2011/10/24)
问题1:实际开发中系统之间的交互并非用的是xml文件,而是xml字符串,
故问题1通过把xml转换为字符串,然后在字符串前加xml的定义语句。
代码更改:(从新建XStream 对象开始,后面的都不需要了。代码改为如下:)
XStream xstream=new XStream();
String? xmlhead="<?xml version="1.0" encoding="UTF-8"?>\n";
String xml=xstream.toXML(root);
String resultxml=xmlhead+xml;//此句就是最后格式化输出的xml字符串,并且包括xml文件定义头
问题2:msg_head和msg_content标签重复了一次
对于这个问题,只需要把root.java文件中声明为ArrayList的变量改为如下:
?private MsgHead msg_head;
?private MsgContent msg_content;
同时分别设置get和set方法。
对于这种问题,有如下结论:
如果节点有重复的,就用ArrayList类型的变量,如果节点没有重复的,就声明为如上类型的变量。
?
经过今天的工作,发现以上的问题基本解决了,但是输出的xml字符串有换行和缩进,
这样和和实际中的需求稍有不同,考虑如何设置通过XSrteam输出的字符串的格式?
去掉换行和缩进:
//匹配字符串中的空白字符(至少2次)、制表符、回车符、新行(换行)符
??Pattern p = Pattern.compile("\\s{2,}|\t|\r|\n");
??Matcher m = p.matcher(xml);
??finalresult = m.replaceAll("");
?
如果您比较细心的看过,会发现凡是下划线就会显示两个,即占用两个字符,
这个和我的需求是不一样的,解决此种问题两种方法:
方式1:声名XStream对象的时候,用它的构造方法,代码如下:
??XStream xstream = new XStream(new XppDriver(new XmlFriendlyReplacer("-_", "_")));
方法2:用replace("__","_")来解决
finalresult=finalresult.replace("__","_");