更新日期20151012
package hrhx.dhm.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Component;
import com.thoughtworks.xstream.XStream;
/**
* @version 20150902
* @author duhongming
*
*/
@Component
public class XmlUtil {
private static XmlUtil instance = null;
private XStream xs = null;
private XmlUtil() {
this.xs = new XStream();
}
/**
* 初始化XmlUtil
* @return
*/
public static synchronized XmlUtil getInstance() {
if (instance == null) {
System.out.println("正在初始化XML处理对象.............");
instance = new XmlUtil();
}
return instance;
}
/**
* 将Object转化为XML字符串
* @param obj
* @return
* @throws Exception
*/
public String toXML(Object obj) throws Exception {
if (obj == null)
return null;
return this.xs.toXML(obj);
}
/**
* 对toXML方法重载,修改<节点名称>
* @param obj
* @param aliasMap
* @return
* @throws Exception
*/
@SuppressWarnings("rawtypes")
public String toXML(Object obj,Map<String,Class> aliasMap) throws Exception {
if (obj == null)
return null;
for(Map.Entry<String, Class> entry:aliasMap.entrySet()){
this.xs.alias(entry.getKey(), entry.getValue());
}
return this.xs.toXML(obj);
}
/**
* 将Object转化为XML文件
* @param obj
* @param strFile
* @throws Exception
*/
public void toXMLFile(Object obj, String strFile) throws Exception {
if (obj == null)
return;
if ((strFile == null) || (strFile.equals("")))
throw new Exception("XML保存的文件名不能为空!");
String str = strFile;
str = str.replaceAll("//", "/");
File f = new File(str.substring( 0, str.lastIndexOf("/")));
if (!f.exists())
f.mkdirs();
FileOutputStream fos = null;
try {
fos = new FileOutputStream(new File(str));
this.xs.toXML(obj, fos);
fos.close();
} catch (Exception e) {
if (fos != null)
fos.close();
e.printStackTrace();
throw new Exception("将对象写到文件" + str + "失败!" + e.getMessage());
}
}
/**
* 将XML字符串转成Object
* @param xml
* @return
* @throws Exception
*/
public Object fromXML(String xml) throws Exception {
if ((xml == null) || (xml.equals("")))
return null;
return this.xs.fromXML(xml);
}
/**
* 将XML文件转成Object
* @param strFile
* @return
* @throws Exception
*/
public Object fromXMLFile(String strFile) throws Exception {
if ((strFile == null) || (strFile.equals("")))
return null;
FileInputStream fis = null;
Object obj = null;
String str = strFile;
str = str.replaceAll("//", "/");
File f = new File(str);
if (!f.exists())
return null;
try {
fis = new FileInputStream(f);
obj = this.xs.fromXML(fis).toString();
fis.close();
} catch (Exception e) {
if (fis != null)
fis.close();
e.printStackTrace();
throw new Exception("从文件" + str + "读取内容进行对象转换时失败!" + e.getMessage());
}
return obj;
}
public static void main(String[] args) throws Exception {
String begin = "2002-10-21 23:12:34";
begin = begin.substring( 5, 7) + "月" + begin.substring( 8, 10) + "日";
List<String> list = new ArrayList<String>();
list.add("duhongming");
list.add("24");
list.add(begin);
String listXml = getInstance().toXML(list);
System.out.println("将List数据转成XML:"+listXml);
System.out.println("将XML数据转成List:"+getInstance().fromXML(listXml));
String templateFileName = System.getProperty("user.dir")+"/target/demo.xml";
getInstance().toXMLFile(list, templateFileName);
System.out.println("将XML文件数据转成List:"+getInstance().fromXMLFile(templateFileName));
Map<String,String> map = new HashMap<String,String>();
map.put("name", "duhongming");
map.put("age", "24");
map.put("birthday", "7月26日");
String mapXml = getInstance().toXML(map);
System.out.println("将Map数据转成XML:"+mapXml);
System.out.println(("将XML数据转成Map:"+getInstance().fromXML(mapXml)));
}
}
附Java平台自带的注解功能:
package com.hrhx.db;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlRootElement;
import com.sun.xml.internal.txw2.annotation.XmlElement;
@XmlRootElement
public class TestMenu {
private String menuName;
private String menuUrl;
private String userName;
private String timestamp;
@XmlElement
public String getMenuName() {
return menuName;
}
public void setMenuName(String menuName) {
this.menuName = menuName;
}
@XmlElement
public String getMenuUrl() {
return menuUrl;
}
public void setMenuUrl(String menuUrl) {
this.menuUrl = menuUrl;
}
@XmlElement
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@XmlElement
public String getTimestamp() {
return timestamp;
}
public void setTimestamp(String timestamp) {
this.timestamp = timestamp;
}
public static void main(String[] args) {
JAXBContext jc;
try {
jc = JAXBContext.newInstance(TestMenu.class);
Marshaller ms = jc.createMarshaller();
TestMenu t = new TestMenu();
t.setMenuName("baidu");
t.setMenuUrl("http://www.baidu.com");
t.setTimestamp("2015-10-1");
t.setUserName("zhangsan");
// System.out.println(t);
ms.marshal(t, System.out);
} catch (JAXBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
在这个例子中,我们首先创建一个DocumentDescriptor来描述Person类,并设置XML元素名。然后,通过WriteMapper将对象写入XML,通过ReadMapper从XML读取并反序列化。 **比较与选择** XStream通常被认为比Betwixt更...
本资源包含了一系列全面的Java工具类,涵盖了多个核心领域,如日期处理、字符串操作、文件管理、XML和JSON解析以及HTTP请求等。 1. **日期工具类**: Java中的日期时间处理在过去一直被诟病,但在Java 8引入了`...
在Java中,可以使用JAXP(Java API for XML Processing)的`DocumentBuilderFactory`和`DocumentBuilder`类来创建DOM解析器。例如: ```java DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance...
MyClass anotherObj = (MyClass) xstream.fromXML(xmlString); ``` XStream还支持JSON转换,但默认不是启用的,需要额外配置。 5. **Apache Commons BeanUtils** Apache Commons BeanUtils是Apache软件基金会的...
Java的`javax.xml.stream.XMLInputFactory`、`XMLStreamReader`和`XMLStreamWriter`类用于实现StAX解析。 在实际开发中,选择哪种解析方式取决于具体需求,如数据量大小、性能要求、代码简洁性等因素。对于小型XML...
XStream库则被用作数据序列化工具,它能够将Java对象转换为XML,反之亦然,这对于在网络间或者持久存储时传输和恢复对象非常有用。 "activemq-transport-xstream-1.4.jar"是这个特定组件的Java Archive(JAR)文件...
1. 自动映射Java类到XML元素:XStream可以自动将类的属性转换为XML元素,无需编写额外的代码。 2. 自定义序列化和反序列化规则:如果默认的映射不符合需求,可以通过注解或者配置自定义转换规则。 3. 支持复杂的数据...
6. **其他库**:除了JAXB,Java还有其他库可以实现XML到Object的转换,例如Apache的`XStream`和Google的`Gson`。这些库提供了不同的功能和性能,可以根据项目需求选择。 7. **性能优化**:对于大型XML文件,可以...
Java工具如JAXB和XML Beans可以直接使用XSD文件生成Java类,从而实现对象到XML的严格映射。 总之,XML与Java对象的映射是Java开发中的重要环节,涉及多种技术和工具。开发者可以根据项目需求选择合适的工具,如JAXB...
Apache Commons BeanUtils库提供了一个名为`ConvertUtils`的工具类,它包含了将JavaBean转换为XML的方法。使用此方法可以更灵活地控制XML的生成,但可能需要更多的代码来设置和配置。示例如下: ```java ...
- 使用Apache的JAXB(Java Architecture for XML Binding):JAXB允许将XML绑定到Java对象,然后再将这些对象转换为JSON。 2. JSON到XML转换: - Jackson库同样提供了反向转换功能,使用`writeValueAsString`方法...
- 接下来,使用工具如XJC(XSD to Java Compiler)自动生成对应的Java类,这些Java类与XML Schema中的元素一一对应。 2. **Java对象与XML文档的转换**: - 序列化:将Java对象转换为XML文档的过程称为序列化。这...
`org.xml.sax.helpers.DefaultHandler` 是SAX解析的基础类,可重写其方法来处理事件。 - StAX解析:Streaming API for XML 提供了更高效的流式处理方式,允许程序按需读取XML数据,降低了内存占用。`javax.xml....
除了Java自带的库外,还有一些第三方库,如Apache Digester和XStream,它们提供更灵活和易用的方法来实现对象和XML的转换。例如,XStream可以直接通过简单的配置将XML转换为Java对象,而无需编写额外的解析代码。 5...
除了JAXB,还可以使用DOM API手动解析XML并设置JavaBean的属性,或者使用第三方库如Apache的Digester或XStream等进行转换。 在实际应用中,我们还需要关注一些细节问题,比如XML命名空间(Namespace)的处理、XML...
9. **数据绑定技术**:CXF支持多种数据绑定技术,如JAXB(Java Architecture for XML Binding)和XStream,将XML数据自动映射到Java对象,简化了数据处理。 10. **性能优化**:Apache CXF允许进行性能调整,例如...
5. **XStream** (xstream-1.4.8的jar包): XStream 是一个Java库,能够将Java对象序列化为XML,反之亦然。这对于数据存储和交换非常有用,特别是在网络通信和持久化场景下。 6. **中文分词工具包** (中文分词工具包....
2、XML验证文档的生成工具 trang.jar 3、利用XSD文件的XML3种验证方法 1)Dom4j的SAXValidator (dom4j.jar, javax.xml.parsers 相关类) 2)Javax.xml.validation API(Java1.5及以上) 3)Jdom(jdom.jar,xerces...
本文将重点解析`activemq-transport-xstream-2.0.jar`这个特定的组件,以及它在ActiveMQ生态系统中的作用。 首先,`xstream`是XStream库的简称,它是一个用于Java对象到XML和XML到Java对象转换的库。XStream因其...