RT

解决方案 »

  1.   

    直接将字符串写入.xml文件不就行了么?
      

  2.   

    当然,你是直接保存为xml文件,又不是对xml文档结构进行操作
      

  3.   

    http://topic.csdn.net/u/20120720/10/b0ae8c20-9749-473e-b834-caea67e92e92.html
    这有个类似的问题,只不过这个是追加写,你是直接写,更简单
      

  4.   

    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;
    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
      

  5.   

    楼主把你的xml形式的字符串粘出来看看吧。
      

  6.   

    Document dom=DocumentHelper.parseText("");