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

展开全部

JXmlSerializable 是一个利用java反射,通过调用对象中所有以32313133353236313431303231363533e58685e5aeb931333264646462get(不区分大小写)开头的方法除去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;

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 + " ");

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 + " ");

56 out.write(obj.toString());

57 out.write(" " + method.getName().substring(3) + "> ");

58 }

59

60 }

61}

编译出来还可以,能够达到我的理想。

编译结果是

1<?xml version="1.0"?>

2

3 jack

4 0

5 male

6<?xml version="1.0"?>

7

8 tom

9 0

10 male

11

12<?xml version="1.0"?>

13

14 Marie

15 0

16 female

17

18

今天看了看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 *

使用XML文件存取可序列化的对象的类

14 * 提供保存和读取的方法

15 * @author 殷晋

16 * 清华大学汽车工程开发研究院@2005

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也可以从文件中反序列化初对象

追问

看到了,以文件形式输出,不过你这代码之中要改一下out.write(" ");

这个应该要用转义字符转下,不然编译通不过,out.write(" ");

谢谢啦~

追答

我这个只是把String 类型转换为 xml 输出自己写呗!

本回答被提问者采纳

2Q==

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
String转换为XML格式可以使用Java自带的javax.xml.transform库中的Transformer类。可以按照以下步骤实现: 1. 创建一个DocumentBuilderFactory对象,用于创建一个DocumentBuilder对象。 2. 使用DocumentBuilder对象创建一个新的Document对象。 3. 将Java String解析为一个XML节点,并将它添加到Document中。 4. 创建一个TransformerFactory对象并创建一个Transformer对象。 5. 使用Transformer对象将Document对象转换为String。 下面是一个示例代码: ```java import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; public class StringToXmlConverter { public static void main(String[] args) throws Exception { String input = "<root><message>Hello World</message></root>"; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(new InputSource(new StringReader(input))); TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(System.out); transformer.transform(source, result); } } ``` 在上面的示例中,我们将字符串`<root><message>Hello World</message></root>`转换为以下XML格式: ```xml <?xml version="1.0" encoding="UTF-8" standalone="no"?> <root> <message>Hello World</message> </root> ``` 你可以根据自己的需求修改示例中的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值