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与Java对象之间的转换过程,还提高了开发效率。在实际项目中,合理利用XStream可以有效地管理复杂的数据结构。
如果你使用的是Maven,可以在pom.xml文件中添加如下依赖: ```xml <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream <version>1.4.18 ``` 2. **基本配置** 创建xStream实例并进行基本...
而XStream是一个Java库,它提供了简单且直观的方式来序列化和反序列化Java对象到XML,以及从XML回溯到Java对象。本篇文章将深入探讨XStream解析XML的示例,帮助你理解和掌握这一强大的工具。 首先,我们需要理解...
Xstream是一款强大的Java库,用于实现Java对象与XML文档之间的转换。这种转换不仅支持基本数据类型,也适用于复杂的数据结构,包括自定义类和集合。Xstream的设计旨在简化序列化过程,使得开发者能够轻松地在Java...
如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream <version>1.4.19 ``` 接下来,我们创建一个简单的Java对象,例如: ```...
如果你使用的是 Maven,可以在 `pom.xml` 文件中添加如下依赖: ```xml <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream <version>1.4.19 ``` 2. **基本序列化** 假设我们有一个简单的...
在IT行业中,XML(eXtensible Markup Language)是一种用于存储和传输数据的标准化格式,广泛应用在各种系统间的数据...实际应用中,开发者可以根据这些知识对XML数据进行读取、解析和存储,提升开发效率和代码可读性。
在`xmlAnalysis`文件夹中,可能包含了一个简单的Java程序,演示了如何使用DOM、SAX、StAX和XStream解析XML文件,并展示了XStream如何在JavaBean与XML之间进行转换。你可以运行这些代码,观察输出结果,以加深理解。...
XStream在运行时使用Java反射机制对要进行序列化的对象树的结构进行探索,并不需要对对象作出修改。XStream可以序列化内部字段,包括私private和final字段,并且支持非公开类以及内部类。 在缺省情况下,XStream不...
在这个场景中,"使用XStream多集合生成xml"是一个关键的技术点,它涉及到如何将多个集合类的对象转换成XML文档。以下是对这一主题的详细说明。 首先,我们需要了解XStream的基本用法。XStream的核心是`XStream`类,...
对于XML文件的读写,XStream提供了`marshal()`和`unmarshal()`方法。`marshal()`方法用于将Java对象写入XML文件,而`unmarshal()`方法用于从XML文件中恢复Java对象。以下是使用这两个方法的示例: ```java // 写入...
这篇文档将深入探讨XStream的核心概念、使用方法以及其在处理XML时的一些关键特性。 一、XStream简介 XStream由Johannes Link创建,是一个基于反射的库,它提供了简单且直观的方式来处理对象与XML之间的转换。它的...
Xstream 是一个 Java 库,用于处理 XML 文件的序列化和反序列化,同时也支持将 JavaBean 转换为 JSON 格式。它的核心理念是通过简单的 API 设计,使得 XML 序列化过程变得简洁,无需额外的映射文件或辅助类。 ### 1...
如果你的项目是Maven管理的,可以在pom.xml文件中添加如下依赖: ```xml <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream <version>1.4.17 ``` 一旦引入了XStream,我们可以创建一个简单的...
这种模式特别适合处理大型XML文件,因为它避免了一次性加载整个文档到内存中。 在给定的压缩包文件中,包含以下三个库: 1. xstream-1.4.jar:这是XStream的主要库文件,包含了所有必要的类和方法,用于实现XML和...
在Android开发中,XML文件广泛用于存储数据、配置界面布局以及资源定义等。XML解析是Android应用程序处理这些文件的关键步骤。XStream是一个强大的Java库,它允许开发者将对象序列化为XML,反之亦然,这使得XML数据...
* xstream 解析xml测试,本程序使用两种方式进行解析 * 分别为:注解方式与编程设置别名方式 * 注解方式代码更为简单,但对model需要用注解方式编写 * 编程设置别名方式代码稍复杂,但更灵活。 * @author 蜜我 ...
XStream 是一个强大的 Java 库,它允许程序员以一种简单直观的方式将 Java 对象序列化为 XML,同时也可以从 XML 文档反序列化回 Java 对象。在标题和描述中提到的 "xstream-1.3.1.jar" 是 XStream 的一个版本,这个 ...
与XStream相比,Betwixt的使用可能稍微复杂一些,但提供了更强大的定制能力,例如通过注解或XML配置文件来指定对象的映射规则。 **Betwixt使用示例** ```java import org.apache.betwixt.io.ReadMapper; import org...
XStream也支持将XML数据恢复为Java对象,这对于从XML文件或网络响应中加载数据非常有用。 1. **设置别名**:与序列化相同,你需要设置XML标签的别名,以便XStream知道如何映射回正确的Java类型。 2. **从XML恢复对象...