`

xstream读写xml文件

阅读更多

 

1、xml文件结构如下:

 

<?xml version="1.0" encoding="UTF-8"?>
<datasync>
	<readmodule>
		<read name='read_one'>
			<path>/data/rsync/read_one</path>
			<ip>127.0.0.1</ip>
			<comment>readOne</comment>
		</read>
		<read name='read_two'>
			<path>/data/rsync/read_two</path>
			<ip>127.0.0.1</ip>
			<comment>readTwo</comment>
		</read>
	</readmodule>
	
	<writemodule>
		<write name='write_one'>
			<path>/data/rsync/write_one</path>
			<ip>127.0.0.1</ip>
			<comment>writeOne</comment>
		</write>
		<write name='write_two'>
			<path>/data/rsync/write_two</path>
			<ip>127.0.0.1</ip>
			<comment>writeTwo</comment>
		</write>	
	</writemodule>
</datasync>

 

2、model类如下:

(1)dataSync

public class DataSync {

	private ReadModule readmodule;
	private WriteModule writemodule;
}

get/set方法省略

 (2)ReadModule

public class ReadModule {
	
	private List<Read> reads;
	
}

 (3)WriteModule

public class WriteModule {
	
	private List<Write> writes;
	
}

 (4)Read

public class Read {
	
	private String name;
	private String path;	
	private String ip;
	private String comment;

}

 (5)Write

public class Write {
	
	private String name;
	private String path;
	private String ip;	
	private String comment;

}

 

3、controller如下:

 

 

public class DataRsyncController{

 private Log logger = LogFactory.getLog(this.getClass());
 
 private static final String readBasePath="/data/rsync/to_3rd_party_data/data_sync"; 
 private static final String writeBasePath="/data/rsync/3rd_party_data/data_sync"; 
 private static final String buildBasePath=System.getProperty("user.dir") + "/dataSync/";
 private static String xmlHead = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; 
 private static String PREFIX_CDATA = "<![CDATA[";
 private static String SUFFIX_CDATA = "]]>";
 
 @RequestMapping
 public String test(ModelMap model) throws IOException{
  
  buildDataSyncXml();
  
  return "commons/message";
 }

 
 private void buildDataSyncXml() throws IOException{
  // 解析xml得到dataSyncXml对象
  XStream xstream = buildDataSyncXStream();
  
  // 重新组装DataSyncXml对象
  DataSyncXml reLoadDataSyncXml = reLoadDataSyncXml();
  
  FileWriter fileWriter = new FileWriter(buildBasePath+"datasync_server_config.xml");
  fileWriter.write(xmlHead+"\n");
  xstream.toXML(reLoadDataSyncXml,fileWriter);
  fileWriter.close();
 }

 
 /**
  * 获取data_sync表的记录重新组装DataSyncXml对象
  * @param dataSyncXml
  * @return
  */
 private DataSyncXml reLoadDataSyncXml(){

  List<Read> reads = new ArrayList<Read>();
  List<Write> writes = new ArrayList<Write>();
  
  List<DataSync> dataSyncs = dataSyncService.getDataSyncList();
  for(DataSync dataSync:dataSyncs){
   String syncType = dataSync.getSyncType();
   String moduleCode = dataSync.getModuleCode();
   if("read".equals(syncType)){
    Read read = new Read();
    read.setName(moduleCode);
    read.setPath(dataSync.getPath());
    read.setIp(dataSync.getIpLimit());
    read.setComment(dataSync.getModuleName()+";"+dataSync.getAuthor()+";"+dataSync.getRemark());
    reads.add(read);
    
   }else if("write".equals(syncType)){
    Write write = new Write();
    write.setName(moduleCode);
    write.setPath(dataSync.getPath());
    write.setIp(dataSync.getIpLimit());
    write.setComment(dataSync.getModuleName()+";"+dataSync.getAuthor()+";"+dataSync.getRemark());
    writes.add(write);    
   }
  } 
  
  ReadModule readModule = new ReadModule();
  WriteModule writeModule = new WriteModule();
  DataSync dataSync = new DataSync();
  readModule.setReads(reads);
  writeModule.setWrites(writes);
  dataSync.setReadmodule(readModule);
  dataSync.setWritemodule(writeModule);
  
  return dataSync;
 }


 
 private static XStream buildDataSyncXStream() {
 // XStream xstream = new XStream(new DomDriver());
  XStream xstream = initXStream(false);
  
  xstream.alias("datasync", DataSync.class);
  xstream.alias("readmodule", ReadModule.class);
  xstream.alias("read", Read.class);
  xstream.alias("writemodule", WriteModule.class);
  xstream.alias("write", Write.class);
  
  //忽略下列的名字的节点
  xstream.addImplicitCollection(ReadModule.class, "reads");
  xstream.addImplicitCollection(WriteModule.class, "writes");
  
  //使用这个属性名作为节点上的元素
  xstream.useAttributeFor(Read.class, "name");
  xstream.useAttributeFor(Write.class, "name");

  return xstream;
 }
 

 // 判断是否需要检测“"<![CDATA  ]]>”特殊字符
 private static XStream initXStream(boolean isAddCDATA){
  XStream xstream = null;
  if(isAddCDATA){
  xstream =  new XStream(
    new XppDriver() {
           public HierarchicalStreamWriter createWriter(Writer out) {
              return new PrettyPrintWriter(out) {
              protected void writeText(QuickWriter writer, String text) {
                           if(text.startsWith(PREFIX_CDATA)
                          && text.endsWith(SUFFIX_CDATA)) {
                               writer.write(text);
                           }else{
                           super.writeText(writer, text);
                           }
               }
             };
           };
         }
     );
  }else{
  xstream = new XStream(new XppDriver());
  }
       return xstream;
  }
 
}

分享到:
评论

相关推荐

    利用XStream读写xml文件

    通过本篇内容的学习,我们了解了XStream的基本原理以及如何使用它来读写XML文件。XStream不仅简化了XML与Java对象之间的转换过程,还提高了开发效率。在实际项目中,合理利用XStream可以有效地管理复杂的数据结构。

    Java用xStream拼接xml

    如果你使用的是Maven,可以在pom.xml文件中添加如下依赖: ```xml &lt;groupId&gt;com.thoughtworks.xstream&lt;/groupId&gt; &lt;artifactId&gt;xstream &lt;version&gt;1.4.18 ``` 2. **基本配置** 创建xStream实例并进行基本...

    XStream解析xml demo

    而XStream是一个Java库,它提供了简单且直观的方式来序列化和反序列化Java对象到XML,以及从XML回溯到Java对象。本篇文章将深入探讨XStream解析XML的示例,帮助你理解和掌握这一强大的工具。 首先,我们需要理解...

    Xstream生产xml和解析xml

    Xstream是一款强大的Java库,用于实现Java对象与XML文档之间的转换。这种转换不仅支持基本数据类型,也适用于复杂的数据结构,包括自定义类和集合。Xstream的设计旨在简化序列化过程,使得开发者能够轻松地在Java...

    xstream对象与xml转换

    如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;com.thoughtworks.xstream&lt;/groupId&gt; &lt;artifactId&gt;xstream &lt;version&gt;1.4.19 ``` 接下来,我们创建一个简单的Java对象,例如: ```...

    XStream XML解析

    如果你使用的是 Maven,可以在 `pom.xml` 文件中添加如下依赖: ```xml &lt;groupId&gt;com.thoughtworks.xstream&lt;/groupId&gt; &lt;artifactId&gt;xstream &lt;version&gt;1.4.19 ``` 2. **基本序列化** 假设我们有一个简单的...

    xstream解析xml

    在IT行业中,XML(eXtensible Markup Language)是一种用于存储和传输数据的标准化格式,广泛应用在各种系统间的数据...实际应用中,开发者可以根据这些知识对XML数据进行读取、解析和存储,提升开发效率和代码可读性。

    xml解析及使用XStream实现javaBean与xml之间的转换

    在`xmlAnalysis`文件夹中,可能包含了一个简单的Java程序,演示了如何使用DOM、SAX、StAX和XStream解析XML文件,并展示了XStream如何在JavaBean与XML之间进行转换。你可以运行这些代码,观察输出结果,以加深理解。...

    XStream XML与Json转换

    XStream在运行时使用Java反射机制对要进行序列化的对象树的结构进行探索,并不需要对对象作出修改。XStream可以序列化内部字段,包括私private和final字段,并且支持非公开类以及内部类。 在缺省情况下,XStream不...

    使用XStream 多集合生成xml

    在这个场景中,"使用XStream多集合生成xml"是一个关键的技术点,它涉及到如何将多个集合类的对象转换成XML文档。以下是对这一主题的详细说明。 首先,我们需要了解XStream的基本用法。XStream的核心是`XStream`类,...

    使用xstream进行java类与xml文件互转解析--代码

    对于XML文件的读写,XStream提供了`marshal()`和`unmarshal()`方法。`marshal()`方法用于将Java对象写入XML文件,而`unmarshal()`方法用于从XML文件中恢复Java对象。以下是使用这两个方法的示例: ```java // 写入...

    我对xstream对xml的操作的一些记录,仅够参考!

    这篇文档将深入探讨XStream的核心概念、使用方法以及其在处理XML时的一些关键特性。 一、XStream简介 XStream由Johannes Link创建,是一个基于反射的库,它提供了简单且直观的方式来处理对象与XML之间的转换。它的...

    Xstream操作Xml与Json.doc

    Xstream 是一个 Java 库,用于处理 XML 文件的序列化和反序列化,同时也支持将 JavaBean 转换为 JSON 格式。它的核心理念是通过简单的 API 设计,使得 XML 序列化过程变得简洁,无需额外的映射文件或辅助类。 ### 1...

    使用XStream是实现XML与Java对象的转换(5)--Object Stream

    如果你的项目是Maven管理的,可以在pom.xml文件中添加如下依赖: ```xml &lt;groupId&gt;com.thoughtworks.xstream&lt;/groupId&gt; &lt;artifactId&gt;xstream &lt;version&gt;1.4.17 ``` 一旦引入了XStream,我们可以创建一个简单的...

    xstream+xmlpull xml to bean &&bean to xml

    这种模式特别适合处理大型XML文件,因为它避免了一次性加载整个文档到内存中。 在给定的压缩包文件中,包含以下三个库: 1. xstream-1.4.jar:这是XStream的主要库文件,包含了所有必要的类和方法,用于实现XML和...

    android XMl 解析神奇xstream 一

    在Android开发中,XML文件广泛用于存储数据、配置界面布局以及资源定义等。XML解析是Android应用程序处理这些文件的关键步骤。XStream是一个强大的Java库,它允许开发者将对象序列化为XML,反之亦然,这使得XML数据...

    xstream 解析XML例程(android)

    * xstream 解析xml测试,本程序使用两种方式进行解析 * 分别为:注解方式与编程设置别名方式 * 注解方式代码更为简单,但对model需要用注解方式编写 * 编程设置别名方式代码稍复杂,但更灵活。 * @author 蜜我 ...

    xstream-1.3.1.jar javabean与xml之间的转化

    XStream 是一个强大的 Java 库,它允许程序员以一种简单直观的方式将 Java 对象序列化为 XML,同时也可以从 XML 文档反序列化回 Java 对象。在标题和描述中提到的 "xstream-1.3.1.jar" 是 XStream 的一个版本,这个 ...

    xstream和betwixt对xml、object的互转

    与XStream相比,Betwixt的使用可能稍微复杂一些,但提供了更强大的定制能力,例如通过注解或XML配置文件来指定对象的映射规则。 **Betwixt使用示例** ```java import org.apache.betwixt.io.ReadMapper; import org...

    xstream 1.3.1.jar bean对象转换为xml

    XStream也支持将XML数据恢复为Java对象,这对于从XML文件或网络响应中加载数据非常有用。 1. **设置别名**:与序列化相同,你需要设置XML标签的别名,以便XStream知道如何映射回正确的Java类型。 2. **从XML恢复对象...

Global site tag (gtag.js) - Google Analytics