java读取xml文件并转换成对象,并进行修改

1.首先要写工具类,处理读取和写入xml文件使用的工具。XMLUtil.java


import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.io.StringWriter;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

/**   
 * 封装了XML转换成object,object转换成XML的代码   
 *    
 * @author mscall
 *    
 */  
public class XMLUtil {
	/**   
     * 将对象直接转换成String类型的 XML输出   
     *    
     * @param obj   
     * @return   
     */    
    public static String convertToXml(Object obj) {    
        // 创建输出流    
        StringWriter sw = new StringWriter();    
        try {    
            // 利用jdk中自带的转换类实现    
            JAXBContext context = JAXBContext.newInstance(obj.getClass());    
    
            Marshaller marshaller = context.createMarshaller();    
            // 格式化xml输出的格式    
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,    
                    Boolean.TRUE);    
            marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); 
            // 将对象转换成输出流形式的xml    
            marshaller.marshal(obj, sw);    
        } catch (JAXBException e) {    
            e.printStackTrace();    
        }    
        return sw.toString();    
    }    
    
    /**   
     * 将对象根据路径写入指定的xml文件里
     *    
     * @param obj   
     * @param path   
     * @return   
     */    
    public static void convertToXml(Object obj, String path) {    
        try {    
            // 利用jdk中自带的转换类实现    
            JAXBContext context = JAXBContext.newInstance(obj.getClass());    
    
            Marshaller marshaller = context.createMarshaller();    
            // 格式化xml输出的格式    
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,    
                    Boolean.TRUE);    
            marshaller.setProperty(Marshaller.JAXB_ENCODING, "GBK");
            // 将对象转换成输出流形式的xml    
            // 创建输出流    
            FileWriter fw = null;    
            try {    
                fw = new FileWriter(path);    
            } catch (IOException e) {    
                e.printStackTrace();    
            }    
            marshaller.marshal(obj, fw);    
        } catch (JAXBException e) {    
            e.printStackTrace();    
        }    
    }    
    
    /**   
     * 将String类型的xml转换成对象   
     */    
    public static Object convertXmlStrToObject(Class<?> clazz, String xmlStr) {    
        Object xmlObject = null;    
        try {
            JAXBContext context = JAXBContext.newInstance(clazz);    
            // 进行将Xml转成对象的核心接口    
            Unmarshaller unmarshal = context.createUnmarshaller();
            StringReader sr = new StringReader(xmlStr);    
            xmlObject = unmarshal.unmarshal(sr);
        } catch (Exception e) {
            e.printStackTrace();    
        }    
        return xmlObject;    
    }    
    
    /**   
     * 将file类型的xml转换成对象   
     */    
    public static Object convertXmlFileToObject(Class<?> clazz, String xmlPath) {    
        Object xmlObject = null;    
        try {
            JAXBContext context = JAXBContext.newInstance(clazz);    
            Unmarshaller unmarshaller = context.createUnmarshaller();      
            InputStreamReader isr=new InputStreamReader(new FileInputStream(xmlPath),"GBK");
            xmlObject = unmarshaller.unmarshal(isr);    
        } catch (Exception e) {    
            e.printStackTrace();    
        }    
        return xmlObject;    
    }    
}

2.测试写入

public static void test(){
	Users users = new Users(); 
	User u = new User(); 
	u.setUsername("admin");
	u.setPassword("123"); 
	List<User> lus = new ArrayList<>(); 
	lus.add(u); 
	users.setUserList(lus);
	try {
		XMLUtil.convertToXml(users, "C:/XML/users.xml");
	} catch (Exception e1) {
		e1.printStackTrace();
	}
 }

3.测试读

Users users = (Users) XMLUtil.convertXmlFileToObject(Users.class, "C:/XML/Users.xml");

4.xml文件

<?xml version="1.0" encoding="GBK" standalone="yes"?>
<users>
    <user>
        <username>admin0</username>
        <password>123</password>
    </user>
    <user>
        <username>admin</username>
        <password>123</password>
    </user>
</users>

end ------------------------------------------------------------------------------------------------------------------------


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

猜你喜欢

转载自blog.csdn.net/weikzhao0521/article/details/77524503
今日推荐