`
阿杜杜不是阿木木
  • 浏览: 21527 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

Apache的xstream解析XML工具类

 
阅读更多

更新日期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();
		}

	}
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    xstream和betwixt对xml、object的互转

    在这个例子中,我们首先创建一个DocumentDescriptor来描述Person类,并设置XML元素名。然后,通过WriteMapper将对象写入XML,通过ReadMapper从XML读取并反序列化。 **比较与选择** XStream通常被认为比Betwixt更...

    java各种工具类-非常齐全

    本资源包含了一系列全面的Java工具类,涵盖了多个核心领域,如日期处理、字符串操作、文件管理、XML和JSON解析以及HTTP请求等。 1. **日期工具类**: Java中的日期时间处理在过去一直被诟病,但在Java 8引入了`...

    读取xml各种格式工具

    在Java中,可以使用JAXP(Java API for XML Processing)的`DocumentBuilderFactory`和`DocumentBuilder`类来创建DOM解析器。例如: ```java DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance...

    json、javaBean、xml互转的几种工具介绍

    MyClass anotherObj = (MyClass) xstream.fromXML(xmlString); ``` XStream还支持JSON转换,但默认不是启用的,需要额外配置。 5. **Apache Commons BeanUtils** Apache Commons BeanUtils是Apache软件基金会的...

    从xml文件读取数据生成对象

    Java的`javax.xml.stream.XMLInputFactory`、`XMLStreamReader`和`XMLStreamWriter`类用于实现StAX解析。 在实际开发中,选择哪种解析方式取决于具体需求,如数据量大小、性能要求、代码简洁性等因素。对于小型XML...

    activemq-transport-xstream-1.4.jar.zip

    XStream库则被用作数据序列化工具,它能够将Java对象转换为XML,反之亦然,这对于在网络间或者持久存储时传输和恢复对象非常有用。 "activemq-transport-xstream-1.4.jar"是这个特定组件的Java Archive(JAR)文件...

    http over xml的实例

    1. 自动映射Java类到XML元素:XStream可以自动将类的属性转换为XML元素,无需编写额外的代码。 2. 自定义序列化和反序列化规则:如果默认的映射不符合需求,可以通过注解或者配置自定义转换规则。 3. 支持复杂的数据...

    XML动态转化为ObjectDemo

    6. **其他库**:除了JAXB,Java还有其他库可以实现XML到Object的转换,例如Apache的`XStream`和Google的`Gson`。这些库提供了不同的功能和性能,可以根据项目需求选择。 7. **性能优化**:对于大型XML文件,可以...

    xml与java对象映射

    Java工具如JAXB和XML Beans可以直接使用XSD文件生成Java类,从而实现对象到XML的严格映射。 总之,XML与Java对象的映射是Java开发中的重要环节,涉及多种技术和工具。开发者可以根据项目需求选择合适的工具,如JAXB...

    JavaBean 转换为xml的三种方式比较

    Apache Commons BeanUtils库提供了一个名为`ConvertUtils`的工具类,它包含了将JavaBean转换为XML的方法。使用此方法可以更灵活地控制XML的生成,但可能需要更多的代码来设置和配置。示例如下: ```java ...

    XML、JAVA、JSON多种方式互相转换

    - 使用Apache的JAXB(Java Architecture for XML Binding):JAXB允许将XML绑定到Java对象,然后再将这些对象转换为JSON。 2. JSON到XML转换: - Jackson库同样提供了反向转换功能,使用`writeValueAsString`方法...

    Java绑定XML架构的技术内涵

    - 接下来,使用工具如XJC(XSD to Java Compiler)自动生成对应的Java类,这些Java类与XML Schema中的元素一一对应。 2. **Java对象与XML文档的转换**: - 序列化:将Java对象转换为XML文档的过程称为序列化。这...

    xml操作的例子

    `org.xml.sax.helpers.DefaultHandler` 是SAX解析的基础类,可重写其方法来处理事件。 - StAX解析:Streaming API for XML 提供了更高效的流式处理方式,允许程序按需读取XML数据,降低了内存占用。`javax.xml....

    java XML和对象的互转

    除了Java自带的库外,还有一些第三方库,如Apache Digester和XStream,它们提供更灵活和易用的方法来实现对象和XML的转换。例如,XStream可以直接通过简单的配置将XML转换为Java对象,而无需编写额外的解析代码。 5...

    xml与javabean的相互转换

    除了JAXB,还可以使用DOM API手动解析XML并设置JavaBean的属性,或者使用第三方库如Apache的Digester或XStream等进行转换。 在实际应用中,我们还需要关注一些细节问题,比如XML命名空间(Namespace)的处理、XML...

    apache-cxf-3.4.4

    9. **数据绑定技术**:CXF支持多种数据绑定技术,如JAXB(Java Architecture for XML Binding)和XStream,将XML数据自动映射到Java对象,简化了数据处理。 10. **性能优化**:Apache CXF允许进行性能调整,例如...

    Java项目常用开发工具类

    5. **XStream** (xstream-1.4.8的jar包): XStream 是一个Java库,能够将Java对象序列化为XML,反之亦然。这对于数据存储和交换非常有用,特别是在网络通信和持久化场景下。 6. **中文分词工具包** (中文分词工具包....

    xml的序列化与验证

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

    本文将重点解析`activemq-transport-xstream-2.0.jar`这个特定的组件,以及它在ActiveMQ生态系统中的作用。 首先,`xstream`是XStream库的简称,它是一个用于Java对象到XML和XML到Java对象转换的库。XStream因其...

Global site tag (gtag.js) - Google Analytics