XML格式String 与 Object互换

最近项目用到xml格式的String类型与Object类型的相互转换,经过学习和前辈指点终于有所了解。在此写两个方法用户相互转换:

1、Object转化为xml格式String

 

public static String toXml(Object obj) {
		String xmlStr = null;
		JAXBContext jaxbContext = null;
		Marshaller marshaller = null;
		StringWriter writer = null;
		try {
			jaxbContext = JAXBContext.newInstance(obj.getClass());
			marshaller = jaxbContext.createMarshaller();
			writer = new StringWriter();
			marshaller.marshal(obj, writer);
			xmlStr = writer.toString();
		} catch (JAXBException e) {
			LOGGER.error("转换失败");
		}
		return xmlStr;
	}

2、xml格式String转化为Object

public static <T> T fromXml(String xmlStr, Class<T> _class) {
		T result = null;
		JAXBContext jaxbContext = null;
		try {
			StringReader reader = new StringReader(xmlStr);
			jaxbContext = JAXBContext.newInstance(_class);
			Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
			result = (T) jaxbUnmarshaller.unmarshal(reader);
		} catch (JAXBException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return result;
	}



XML (Extensible Markup Language) 是一种用于标记数据的格式,常用于存储和传输结构化信息。在Java中,解析XML字符串通常涉及到将XML内容换为Java对象,以便于程序处理。这可以通过DOM(Document Object Model)、SAX(Simple API for XML)或Stax(Streaming API for XML)等API来完成。 1. DOM解析:它将整个XML文档加载到内存中,形成一个树形结构。可以遍历这个树,查找、修改元素。例如,使用`javax.xml.parsers.DocumentBuilderFactory`创建工厂,然后解析XML字符串: ```java DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(new InputSource(new StringReader(xmlStr))); ``` 2. SAX解析:是一种事件驱动的模型,逐行读取XML,不需要一次性加载整个文档。适合处理大文件或流式数据。使用`org.xml.sax.XMLReader`和相关的处理器类: ```java DefaultHandler handler = new DefaultHandler() { // 实现startElement, endElement, characters等回调方法 }; XMLReader reader = XMLReaderFactory.createXMLReader(); reader.setContentHandler(handler); reader.parse(new InputSource(new StringReader(xmlStr))); ``` 3. Stax解析:类似SAX,也是事件驱动,但它提供更简洁的API。可以用`javax.xml.stream.XMLInputFactory`和`XMLStreamReader`来处理: ```java XMLInputFactory factory = XMLInputFactory.newInstance(); XMLStreamReader reader = factory.createXMLStreamReader(new StringReader(xmlStr)); while(reader.hasNext()) { switch(reader.next()) { case START_ELEMENT: // 处理开始元素... break; // 其他元素和字符处理... } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值