问题描述
我用XStream 转出的xml是这样<list> <Contacts> <id>1</id> <name>11</name> <email>111</email> <phone>1111</phone> </Contacts> <Contacts> <id>2</id> <name>22</name> <email>222</email> <phone>2222</phone> </Contacts> <Contacts> <id>3</id> <name>33</name> <email>333</email> <phone>3333</phone> </Contacts></list>但我不希望吧phone暴漏出去,希望的输出结果是<list> <Contacts> <id>1</id> <name>11</name> <email>111</email> </Contacts> <Contacts> <id>2</id> <name>22</name> <email>222</email> </Contacts> <Contacts> <id>3</id> <name>33</name> <email>333</email> </Contacts></list>我试着用XSL 做个转换,但还是比较麻烦,有没有更简洁的办法 问题补充:suziwen 写道
解决方案
规则多的话,自己控制下 XStream xstream = new XStream(); Employee emp = new Employee(); emp.setEmpNo("1"); emp.setJob("bb"); emp.setPhone("111111111"); xstream.omitField(Employee.class, "phone"); String xml = xstream.toXML(emp);
解决方案二:
http://xmlviewer.org 在线XML解析/XML格式化工具
解决方案三:
http://www.atool.org/xmlformat.php 在线格式化,php版本
解决方案四:
可以通过注解(@XStreamOmitField)解决。javabean:public class Employee { private String empNo; private String job; @XStreamOmitField private String phone; public String getEmpNo() { return empNo; } public void setEmpNo(String empNo) { this.empNo = empNo; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; }} XStream xstream = new XStream(); Employee emp = new Employee(); emp.setEmpNo("1"); emp.setJob("bb"); emp.setPhone("111111111"); xstream.processAnnotations(Employee.class); String xml = xstream.toXML(emp); System.out.println(xml);
解决方案五:
public static void filter(String src, String dest) throws IOException {BufferedReader r = new BufferedReader(new FileReader(src));PrintWriter w = new PrintWriter(dest);try {String line;int startIndex;while ((line = r.readLine()) != null) {startIndex = line.indexOf("<phone>");if(startIndex==-1){w.println(line);}}} finally {r.close();w.close();}}对于简单的xml文件,这个代码是适用的
解决方案六:
你可以先把java bean 转换成map形式,并对指定字段进行过滤,然后再用xstream转换这个map对像