XML形式的字符串怎么转换成xml文件 RT 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 直接将字符串写入.xml文件不就行了么? 当然,你是直接保存为xml文件,又不是对xml文档结构进行操作 http://topic.csdn.net/u/20120720/10/b0ae8c20-9749-473e-b834-caea67e92e92.html这有个类似的问题,只不过这个是追加写,你是直接写,更简单 JXmlSerializable 是一个利用java反射,通过调用对象中所有以get(不区分大小写)开头的方法除去getClass方法,生成xml格式,希望与大家分享一下 下面是一个parent对象,包含两个child对象 生成的xml如下 Child类 1package xmlTest; 2 3import java.io.FileNotFoundException; 4import java.io.IOException; 5import java.io.PrintWriter; 6import java.lang.reflect.InvocationTargetException; 7public class Child extends JXmlSerializable { 8 9 private String _name;10 private String _sex;11 private int age;1213 public void setAge(int num) {14 age = num;15 }1617 public int getAge() {18 return age;19 }2021 public void setName(String name) {22 _name = name;23 }2425 public void setSex(String sex) {26 _sex = sex;27 }2829 public String getName() {30 return _name;31 }3233 public String getSex() {34 return _sex;35 }3637}38Parent类 1package xmlTest; 2 3import java.io.PrintWriter; 4import java.lang.reflect.Array; 5import java.util.*; 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;1415 public void setAge(int num) {16 age = num;17 }1819 public int getAge() {20 return age;21 }2223 public void setName(String name) {24 _name = name;25 }2627 public void setSex(String sex) {28 _sex = sex;29 }3031 public String getName() {32 return _name;33 }3435 public String getSex() {36 return _sex;37 }3839 public void addChild(Child child) {40 list.add(child);41 vec.add(child);42 }4344 public Child[] getChild() {4546 Child[] aa = new Child[vec.size()];47 // list.toArray(aa);48 vec.toArray(aa);49 return aa;50 }5152 public static void main(String[] args) {53 // TODO Auto-generated method stub54 try {55 Parent pat = new Parent();56 pat.setName("jack");57 pat.setSex("male");58 Child child1 = new Child();59 child1.setName("tom");60 child1.setSex("male");61 pat.addChild(child1);62 Child child2 = new Child();63 child2.setName("Marie");64 child2.setSex("female");65 pat.addChild(child2);66 pat.getChild();67 PrintWriter out = new PrintWriter("abc.xml");68 pat.toXmlSerial(out,0);69 out.flush();7071 } catch (Exception e) {72 e.printStackTrace();73 }7475 }76}类 JXmlSerializable 1package xmlTest; 2 3import java.lang.reflect.Method; 4import java.lang.reflect.InvocationTargetException; 5import java.lang.reflect.Array; 6import java.io.PrintWriter; 7import java.io.IOException; 8public class JXmlSerializable { 910 public void toXmlSerial(PrintWriter out, int num)11 throws InvocationTargetException, IllegalAccessException,12 IOException {13 out.write("<?xml version="1.0"?> ");14 String head = "";15 for (int i = 0; i < num; i++) {16 head += " ";17 }18 out.write(head + "<" + this.getClass().getName() + "> ");19 Method[] methods = this.getClass().getMethods();20 for (int i = 0; i < methods.length; i++) {21 Class[] paras = methods[i].getParameterTypes();22 String name = methods[i].getName();23 if (paras == null || paras.length == 0) {24 if ((name.substring(0, 3).toLowerCase().equals("get"))25 && !name.equals("getClass")) {26 Object obj = methods[i].invoke(this, null);27 getMethodXmlSerial(out, obj, methods[i], num);28 }29 }30 }3132 out.write(head + "</" + this.getClass().getName() + "> ");3334 }3536 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 (obj.getClass().isArray()) {46 for (int i = 0; i < Array.getLength(obj); i++) {47 Object childobj = Array.get(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 out.write(head + " <" + method.getName().substring(3) + "> ");56 out.write(obj.toString());57 out.write(" </" + method.getName().substring(3) + "> ");58 }5960 }61}编译出来还可以,能够达到我的理想。编译结果是 1<?xml version="1.0"?> 2<xmlTest.Parent> 3 <Name> jack </Name> 4 <Age> 0 </Age> 5 <Sex> male </Sex> 6<?xml version="1.0"?> 7 <xmlTest.Child> 8 <Name> tom </Name> 9 <Age> 0 </Age> 10 <Sex> male </Sex> 11 </xmlTest.Child>12<?xml version="1.0"?>13 <xmlTest.Child>14 <Name> Marie </Name> 15 <Age> 0 </Age> 16 <Sex> female </Sex> 17 </xmlTest.Child>18</xmlTest.Parent>今天看了看java.beans包,发现了两个好东西,XMLEncoder和XMLDecoder。发现自己以前把从XML存取对象真是太费力气啦。做了小工具类,以后可以用用了。 1以下是引用片段: 2package com.imct.util; 3import java.beans.XMLDecoder; 4import java.beans.XMLEncoder; 5import java.io.File; 6import java.io.FileInputStream; 7import java.io.FileNotFoundException; 8import java.io.FileOutputStream; 9import java.io.IOException; 10import java.util.ArrayList; 11import java.util.List; 12/** *//** 13 * <title>使用XML文件存取可序列化的对象的类</title> 14 * <description>提供保存和读取的方法</description> 15 * @author 殷晋 16 * <copyright>清华大学汽车工程开发研究院@2005</copyright> 17 * @version 1.0 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(!fo.exists()) 38 { 39 //先创建文件的目录 40 String path = fileName.substring(0,fileName.lastIndexOf('.')); 41 File pFile = new File(path); 42 pFile.mkdirs(); 43 } 44 //创建文件输出流 45 FileOutputStream fos = new FileOutputStream(fo); 46 //创建XML文件对象输出类实例 47 XMLEncoder encoder = new XMLEncoder(fos); 48 //对象序列化输出到XML文件 49 encoder.writeObject(obj); 50 encoder.flush(); 51 //关闭序列化工具 52 encoder.close(); 53 //关闭输出流 54 fos.close(); 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 = decoder.readObject()) != null) 75 { 76 objList.add(obj); 77 } 78 } 79 catch (Exception e) 80 { 81 // TODO Auto-generated catch block 82 } 83 fis.close(); 84 decoder.close(); 85 return objList; 86 } 87} 88 8990当然用Beans.instantiate也可以从文件中反序列化初对象9192 楼主把你的xml形式的字符串粘出来看看吧。 Document dom=DocumentHelper.parseText(""); 高手说明这个方法的用法 Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ ) 是什么原因呢 请教高手 java中如何得到当前月份英文名称 求个eclipse下载链接 java小白怎么在本论坛学到全面的知识 为什么有数字签名的applet还是不能够Cntr+p粘贴其他文件的内容? 关于消息框和文件选择框的问题。。。(在线等待) 紧急求助:Applet一次能接收消息的长度是否被IE限制不能超过8K? 正则表达式 java 中类的加载问题 关于myeclipse的问题
这有个类似的问题,只不过这个是追加写,你是直接写,更简单
下面是一个parent对象,包含两个child对象 生成的xml如下 Child类 1package xmlTest;
2
3import java.io.FileNotFoundException;
4import java.io.IOException;
5import java.io.PrintWriter;
6import java.lang.reflect.InvocationTargetException;
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 java.io.PrintWriter;
4import java.lang.reflect.Array;
5import java.util.*;
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 list.add(child);
41 vec.add(child);
42 }
43
44 public Child[] getChild() {
45
46 Child[] aa = new Child[vec.size()];
47 // list.toArray(aa);
48 vec.toArray(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 pat.setName("jack");
57 pat.setSex("male");
58 Child child1 = new Child();
59 child1.setName("tom");
60 child1.setSex("male");
61 pat.addChild(child1);
62 Child child2 = new Child();
63 child2.setName("Marie");
64 child2.setSex("female");
65 pat.addChild(child2);
66 pat.getChild();
67 PrintWriter out = new PrintWriter("abc.xml");
68 pat.toXmlSerial(out,0);
69 out.flush();
70
71 } catch (Exception e) {
72 e.printStackTrace();
73 }
74
75 }
76}
类 JXmlSerializable
1package xmlTest;
2
3import java.lang.reflect.Method;
4import java.lang.reflect.InvocationTargetException;
5import java.lang.reflect.Array;
6import java.io.PrintWriter;
7import java.io.IOException;
8public class JXmlSerializable {
9
10 public void toXmlSerial(PrintWriter out, int num)
11 throws InvocationTargetException, IllegalAccessException,
12 IOException {
13 out.write("<?xml version="1.0"?> ");
14 String head = "";
15 for (int i = 0; i < num; i++) {
16 head += " ";
17 }
18 out.write(head + "<" + this.getClass().getName() + "> ");
19 Method[] methods = this.getClass().getMethods();
20 for (int i = 0; i < methods.length; i++) {
21 Class[] paras = methods[i].getParameterTypes();
22 String name = methods[i].getName();
23 if (paras == null || paras.length == 0) {
24 if ((name.substring(0, 3).toLowerCase().equals("get"))
25 && !name.equals("getClass")) {
26 Object obj = methods[i].invoke(this, null);
27 getMethodXmlSerial(out, obj, methods[i], num);
28 }
29 }
30 }
31
32 out.write(head + "</" + this.getClass().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 (obj.getClass().isArray()) {
46 for (int i = 0; i < Array.getLength(obj); i++) {
47 Object childobj = Array.get(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 out.write(head + " <" + method.getName().substring(3) + "> ");
56 out.write(obj.toString());
57 out.write(" </" + method.getName().substring(3) + "> ");
58 }
59
60 }
61}编译出来还可以,能够达到我的理想。编译结果是 1<?xml version="1.0"?>
2<xmlTest.Parent>
3 <Name> jack </Name>
4 <Age> 0 </Age>
5 <Sex> male </Sex>
6<?xml version="1.0"?>
7 <xmlTest.Child>
8 <Name> tom </Name>
9 <Age> 0 </Age>
10 <Sex> male </Sex>
11 </xmlTest.Child>
12<?xml version="1.0"?>
13 <xmlTest.Child>
14 <Name> Marie </Name>
15 <Age> 0 </Age>
16 <Sex> female </Sex>
17 </xmlTest.Child>
18</xmlTest.Parent>
今天看了看java.beans包,发现了两个好东西,XMLEncoder和XMLDecoder。发现自己以前把从XML存取对象真是太费力气啦。做了小工具类,以后可以用用了。
1以下是引用片段:
2package com.imct.util;
3import java.beans.XMLDecoder;
4import java.beans.XMLEncoder;
5import java.io.File;
6import java.io.FileInputStream;
7import java.io.FileNotFoundException;
8import java.io.FileOutputStream;
9import java.io.IOException;
10import java.util.ArrayList;
11import java.util.List;
12/** *//**
13 * <title>使用XML文件存取可序列化的对象的类</title>
14 * <description>提供保存和读取的方法</description>
15 * @author 殷晋
16 * <copyright>清华大学汽车工程开发研究院@2005</copyright>
17 * @version 1.0
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(!fo.exists())
38 {
39 //先创建文件的目录
40 String path = fileName.substring(0,fileName.lastIndexOf('.'));
41 File pFile = new File(path);
42 pFile.mkdirs();
43 }
44 //创建文件输出流
45 FileOutputStream fos = new FileOutputStream(fo);
46 //创建XML文件对象输出类实例
47 XMLEncoder encoder = new XMLEncoder(fos);
48 //对象序列化输出到XML文件
49 encoder.writeObject(obj);
50 encoder.flush();
51 //关闭序列化工具
52 encoder.close();
53 //关闭输出流
54 fos.close();
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 = decoder.readObject()) != null)
75 {
76 objList.add(obj);
77 }
78 }
79 catch (Exception e)
80 {
81 // TODO Auto-generated catch block
82 }
83 fis.close();
84 decoder.close();
85 return objList;
86 }
87}
88
89
90当然用Beans.instantiate也可以从文件中反序列化初对象
91
92