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

































可以使用Java中的DOM或SAX解析器来读取XML内容将其转换为Java对象。 DOM解析器将整个XML文档加载到内存中,允许您对文档进行修改和查询。以下是使用DOM解析器读取XML内容将其转换为Java对象示例代码: ```java import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Node; import org.w3c.dom.Element; public class XmlToObjectConverter { public static void main(String[] args) { try { File inputFile = new File("example.xml"); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(inputFile); doc.getDocumentElement().normalize(); NodeList nodeList = doc.getElementsByTagName("student"); for (int i = 0; i < nodeList.getLength(); i++) { Node node = nodeList.item(i); if (node.getNodeType() == Node.ELEMENT_NODE) { Element element = (Element) node; String name = element.getElementsByTagName("name").item(0).getTextContent(); int age = Integer.parseInt(element.getElementsByTagName("age").item(0).getTextContent()); String gender = element.getElementsByTagName("gender").item(0).getTextContent(); Student student = new Student(name, age, gender); System.out.println(student); } } } catch (Exception e) { e.printStackTrace(); } } } class Student { private String name; private int age; private String gender; public Student(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return "Name: " + name + ", Age: " + age + ", Gender: " + gender; } } ``` SAX解析器是一种事件驱动的解析器,它逐行读取XML文档触发相应的事件。它比DOM解析器更快,但不允许您修改XML文档。以下是使用SAX解析器读取XML内容将其转换为Java对象示例代码: ```java import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; public class XmlToObjectConverter { public static void main(String[] args) { try { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser(); DefaultHandler handler = new DefaultHandler() { boolean bName = false; boolean bAge = false; boolean bGender = false; public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if (qName.equalsIgnoreCase("name")) { bName = true; } if (qName.equalsIgnoreCase("age")) { bAge = true; } if (qName.equalsIgnoreCase("gender")) { bGender = true; } } public void characters(char ch[], int start, int length) throws SAXException { if (bName) { String name = new String(ch, start, length); bName = false; } if (bAge) { int age = Integer.parseInt(new String(ch, start, length)); bAge = false; } if (bGender) { String gender = new String(ch, start, length); bGender = false; Student student = new Student(name, age, gender); System.out.println(student); } } }; saxParser.parse(new File("example.xml"), handler); } catch (Exception e) { e.printStackTrace(); } } } class Student { private String name; private int age; private String gender; public Student(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return "Name: " + name + ", Age: " + age + ", Gender: " + gender; } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值