用Java怎么把String类型的字符串转化为XML格式输出?

用Java怎么把String类型的字符串转化为XML格式输出?,第1张

JXmlSerializable 是一个利用java反射,通过调用对象中所有以get(不区分大小写)开头的方法除去getClass方法,生成xml格式,希望与大家分享一下
下面是一个parent对象,包含两个child对象 生成的xml如下
Child类
1package xmlTest;
2
3import javaioFileNotFoundException;
4import javaioIOException;
5import javaioPrintWriter;
6import javalangreflectInvocationTargetException;
7public class Child extends JXmlSerializable {
8
9 private String _name;
10 private String _sex;
11 private int age;
12
13 public void setAge(int num) {
14 age = num;
15 }
16
17 public int getAge() {
18 return age;
19 }
20
21 public void setName(String name) {
22 _name = name;
23 }
24
25 public void setSex(String sex) {
26 _sex = sex;
27 }
28
29 public String getName() {
30 return _name;
31 }
32
33 public String getSex() {
34 return _sex;
35 }
36
37}
38
Parent类 1package xmlTest;
2
3import javaioPrintWriter;
4import javalangreflectArray;
5import javautil;
6
7public class Parent extends JXmlSerializable {
8
9 private String _name;
10 private String _sex;
11 private LinkedList list = new LinkedList();
12 private Vector vec = new Vector();
13 int age;
14
15 public void setAge(int num) {
16 age = num;
17 }
18
19 public int getAge() {
20 return age;
21 }
22
23 public void setName(String name) {
24 _name = name;
25 }
26
27 public void setSex(String sex) {
28 _sex = sex;
29 }
30
31 public String getName() {
32 return _name;
33 }
34
35 public String getSex() {
36 return _sex;
37 }
38
39 public void addChild(Child child) {
40 listadd(child);
41 vecadd(child);
42 }
43
44 public Child[] getChild() {
45
46 Child[] aa = new Child[vecsize()];
47 // listtoArray(aa);
48 vectoArray(aa);
49 return aa;
50 }
51
52 public static void main(String[] args) {
53 // TODO Auto-generated method stub
54 try {
55 Parent pat = new Parent();
56 patsetName("jack");
57 patsetSex("male");
58 Child child1 = new Child();
59 child1setName("tom");
60 child1setSex("male");
61 pataddChild(child1);
62 Child child2 = new Child();
63 child2setName("Marie");
64 child2setSex("female");
65 pataddChild(child2);
66 patgetChild();
67 PrintWriter out = new PrintWriter("abcxml");
68 pattoXmlSerial(out,0);
69 outflush();
70
71 } catch (Exception e) {
72 eprintStackTrace();
73 }
74
75 }
76}
类 JXmlSerializable
1package xmlTest;
2
3import javalangreflectMethod;
4import javalangreflectInvocationTargetException;
5import javalangreflectArray;
6import javaioPrintWriter;
7import javaioIOException;
8public class JXmlSerializable {
9
10 public void toXmlSerial(PrintWriter out, int num)
11 throws InvocationTargetException, IllegalAccessException,
12 IOException {
13 outwrite("<xml version="10"> ");
14 String head = "";
15 for (int i = 0; i < num; i++) {
16 head += " ";
17 }
18 outwrite(head + "<" + thisgetClass()getName() + "> ");
19 Method[] methods = thisgetClass()getMethods();
20 for (int i = 0; i < methodslength; i++) {
21 Class[] paras = methods[i]getParameterTypes();
22 String name = methods[i]getName();
23 if (paras == null || paraslength == 0) {
24 if ((namesubstring(0, 3)toLowerCase()equals("get"))
25 && !nameequals("getClass")) {
26 Object obj = methods[i]invoke(this, null);
27 getMethodXmlSerial(out, obj, methods[i], num);
28 }
29 }
30 }
31
32 outwrite(head + "</" + thisgetClass()getName() + "> ");
33
34 }
35
36 private void getMethodXmlSerial(PrintWriter out, Object obj, Method method,
37 int num) throws InvocationTargetException, IllegalAccessException,
38 IOException {
39 if (obj == null)
40 return;
41 String head = "";
42 for (int i = 0; i <= num; i++) {
43 head += " ";
44 }
45 if (objgetClass()isArray()) {
46 for (int i = 0; i < ArraygetLength(obj); i++) {
47 Object childobj = Arrayget(obj, i);
48 if (childobj instanceof JXmlSerializable) {
49 ((JXmlSerializable) childobj)toXmlSerial(out, num + 1);
50 } else {
51 getMethodXmlSerial(out, childobj, method, num);
52 }
53 }
54 } else {
55 outwrite(head + " <" + methodgetName()substring(3) + "> ");
56 outwrite(objtoString());
57 outwrite(" </" + methodgetName()substring(3) + "> ");
58 }
59
60 }
61}
编译出来还可以,能够达到我的理想。
编译结果是
1<xml version="10">
2<xmlTestParent>
3 <Name> jack </Name>
4 <Age> 0 </Age>
5 <Sex> male </Sex>
6<xml version="10">
7 <xmlTestChild>
8 <Name> tom </Name>
9 <Age> 0 </Age>
10 <Sex> male </Sex>
11 </xmlTestChild>
12<xml version="10">
13 <xmlTestChild>
14 <Name> Marie </Name>
15 <Age> 0 </Age>
16 <Sex> female </Sex>
17 </xmlTestChild>
18</xmlTestParent>
今天看了看javabeans包,发现了两个好东西,XMLEncoder和XMLDecoder。发现自己以前把从XML存取对象真是太费力气啦。做了小工具类,以后可以用用了。
1以下是引用片段:
2package comimctutil;
3import javabeansXMLDecoder;
4import javabeansXMLEncoder;
5import javaioFile;
6import javaioFileInputStream;
7import javaioFileNotFoundException;
8import javaioFileOutputStream;
9import javaioIOException;
10import javautilArrayList;
11import javautilList;
12/ //
13 <title>使用XML文件存取可序列化的对象的类</title>
14 <description>提供保存和读取的方法</description>
15 @author 殷晋
16 <copyright>清华大学汽车工程开发研究院@2005</copyright>
17 @version 10
18 2005-8-5 16:44:49
19 /
20public class ObjectToXMLUtil
21{
22 / //
23 把java的可序列化的对象(实现Serializable接口)序列化保存到XML文件里面,如果想一次保存多个可序列化对象请用集合进行封装
24 保存时将会用现在的对象原来的XML文件内容
25 @param obj 要序列化的可序列化的对象
26 @param fileName 带完全的保存路径的文件名
27 @throws FileNotFoundException 指定位置的文件不存在
28 @throws IOException 输出时发生异常
29 @throws Exception 其他运行时异常
30 /
31 public static void objectXmlEncoder(Object obj,String fileName)
32 throws FileNotFoundException,IOException,Exception
33 {
34 //创建输出文件
35 File fo = new File(fileName);
36 //文件不存在,就创建该文件
37 if(!foexists())
38 {
39 //先创建文件的目录
40 String path = fileNamesubstring(0,fileNamelastIndexOf(''));
41 File pFile = new File(path);
42 pFilemkdirs();
43 }
44 //创建文件输出流
45 FileOutputStream fos = new FileOutputStream(fo);
46 //创建XML文件对象输出类实例
47 XMLEncoder encoder = new XMLEncoder(fos);
48 //对象序列化输出到XML文件
49 encoderwriteObject(obj);
50 encoderflush();
51 //关闭序列化工具
52 encoderclose();
53 //关闭输出流
54 fosclose();
55 }
56 / //
57 读取由objSource指定的XML文件中的序列化保存的对象,返回的结果经过了List封装
58 @param objSource 带全部文件路径的文件全名
59 @return 由XML文件里面保存的对象构成的List列表(可能是一个或者多个的序列化保存的对象)
60 @throws FileNotFoundException 指定的对象读取资源不存在
61 @throws IOException 读取发生错误
62 @throws Exception 其他运行时异常发生
63 /
64 public static List objectXmlDecoder(String objSource)
65 throws FileNotFoundException,IOException,Exception
66 {
67 List objList = new ArrayList();
68 File fin = new File(objSource);
69 FileInputStream fis = new FileInputStream(fin);
70 XMLDecoder decoder = new XMLDecoder(fis);
71 Object obj = null;
72 try
73 {
74 while( (obj = decoderreadObject()) != null)
75 {
76 objListadd(obj);
77 }
78 }
79 catch (Exception e)
80 {
81 // TODO Auto-generated catch block
82 }
83 fisclose();
84 decoderclose();
85 return objList;
86 }
87}
88
89
90当然用Beansinstantiate也可以从文件中反序列化初对象

呵呵,真巧,我也是前些天刚解决的这个问题。
下面两处是很好的参考哦
java读写xml文件
>js 代码
function ajaxRequest()
{
var url = ">

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/yw/13126229.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-05
下一篇 2023-06-05

发表评论

登录后才能评论

评论列表(0条)

保存