- 浏览: 127511 次
- 性别:
-
文章分类
- 全部博客 (390)
- java开发 (0)
- Struts2框架 (0)
- Spring3框架 (0)
- Spring4框架 (0)
- Hibernate3框架 (0)
- Hibernate4框架 (0)
- jQuery前台技术 (0)
- ExtJs3前台技术 (2)
- ExtJs4前台技术 (0)
- javascript脚本语言 (0)
- Oracle数据库 (0)
- MySQL数据库 (0)
- SQL Server数据库 (0)
- JSTL与EL (0)
- Ajax技术 (0)
- DWR技术 (0)
- Ibatis技术 (0)
- Mybatis技术 (0)
- JBPM工作流 (0)
- xstream技术 (0)
- 框架整合技术 (0)
最新评论
使用XStream解析复杂的XML文件
XStream在实现Java、xml之间转换非常的出色。但是有时候一些比较复杂的XML文件就不好下手,在此以如下XML为例演示了XML to Object,Object
to XML的过程。
依赖包:
xstream-1.3.1.jar
xpp3_min-1.1.4c.jar
依赖包:
xstream-1.3.1.jar
xpp3_min-1.1.4c.jar
XML文件:
<IR> <UserDetails> <UID>guest</UID> <UType>JLJE89dd8DasGds6es</UType> <UToken>DG8kxksEo903kdm8e2j4Kds8d</UToken> </UserDetails> <MainContext> <CID>ctx000001</CID> <Banner> <RepName>repname</RepName> </Banner> <GuidedFlows> <GFContext GFType="nav"> <GFCID>gf0001</GFCID> <GFRep> <RepName>test</RepName> </GFRep> <Method Action="method">http://fdsf....</Method> <Parameters> <Param> <Location>location</Location> <ValidateMethod>validate method</ValidateMethod> </Param> </Parameters> </GFContext> <GFContext GFType="nav"> <GFCID>gf0002</GFCID> <GFRep> <RepName>test2</RepName> </GFRep> <Method Action="method2">http://fdsf....</Method> <Parameters> <Param> <Location>location2</Location> <ValidateMethod>validate method2</ValidateMethod> </Param> </Parameters> </GFContext> <GFContext GFType="nav"> <GFCID>gf0003</GFCID> <GFRep> <RepName>test3</RepName> </GFRep> <Method Action="method3">http://fdsf....</Method> <Parameters> <Param> <Location>location3</Location> <ValidateMethod>validate method3</ValidateMethod> </Param> </Parameters> </GFContext> </GuidedFlows> </MainContext> </IR>定义实体类:
UserDetails:
public class UserDetails { private String UID; private String UType; private String UToken; public UserDetails(String UID, String UType, String uToken) { this.UID = UID; this.UType = UType; this.UToken = uToken; } public String getUID() { return UID; } public void setUID(String uID) { UID = uID; } public String getUType() { return UType; } public void setUType(String uType) { UType = uType; } public String getUToken() { return UToken; } public void setUToken(String uToken) { UToken = uToken; } @Override public String toString() { return "UserDetails [UID=" + UID + ", UType=" + UType + ", UToken=" + UToken + "]"; } }
MainContext:
import java.util.ArrayList; import java.util.List; public class MainContext { private String CID; private Banner Banner; private List<GFContext> GFContext = new ArrayList<GFContext>(); public MainContext(String CID, Banner Banner, List<GFContext> GFContext) { this.CID = CID; this.Banner = Banner; this.GFContext = GFContext; } public String getCID() { return CID; } public void setCID(String cID) { CID = cID; } public Banner getBanner() { return Banner; } public void setBanner(Banner banner) { Banner = banner; } public List<GFContext> getGFContext() { return GFContext; } public void setGFContext(List<GFContext> gFContext) { GFContext = gFContext; } @Override public String toString() { return "MainContext [CID=" + CID + ", Banner=" + Banner + ", GuidedFlows=" + GFContext + "]"; } }
Banner:
public class Banner { private String RepName; public Banner(String RepName){ this.RepName = RepName; } public String getRepName() { return RepName; } public void setRepName(String repName) { RepName = repName; } @Override public String toString() { return "Banner [RepName=" + RepName + "]"; } }
GFContext:
public class GFContext { private String GFType; private String GFCID; private GFRep GFRep; private Method Method; private Parameters Parameters; public GFContext(String GFType, String GFCID, GFRep GFRep, Method Method, Parameters Parameters){ this.GFType = GFType; this.GFCID = GFCID; this.GFRep = GFRep; this.Method = Method; this.Parameters = Parameters; } public String getGFType() { return GFType; } public void setGFType(String gFType) { this.GFType = gFType; } public String getGFCID() { return GFCID; } public void setGFCID(String gFCID) { this.GFCID = gFCID; } public GFRep getGFRep() { return GFRep; } public void setGFRep(GFRep gFRep) { this.GFRep = gFRep; } public Method getMethod() { return Method; } public void setMethod(Method Method) { this.Method = Method; } public Parameters getParameters() { return Parameters; } public void setParameters(Parameters parameters) { this.Parameters = parameters; } @Override public String toString() { return "GFContext [GFType=" + GFType + ", GFCID=" + GFCID + ", GFRep=" + GFRep + ", Method=" + Method + ", Parameters=" + Parameters + "]"; } }
GFRep:
public class GFRep { private String RepName; private String RepURL; public GFRep(String RepName) { this.RepName = RepName; } public GFRep(String RepName, String RepURL) { this.RepName = RepName; this.RepURL = RepURL; } public String getRepName() { return RepName; } public void setRepName(String repName) { RepName = repName; } public String getRepURL() { return RepURL; } public void setRepURL(String repURL) { RepURL = repURL; } @Override public String toString() { return "GFRep [RepName=" + RepName + ", RepURL=" + RepURL + "]"; } }
Method:
public class Method { private String Action; private String value; public Method(){ } public Method(String value){ this.value = value; } public Method(String Action, String value){ this.Action = Action; this.value = value; } public String getAction() { return Action; } public void setAction(String action) { Action = action; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } @Override public String toString() { return "Method [Action=" + Action + ", value=" + value + "]"; } }
Parameters:
public class Parameters { private Param Param; public Parameters(Param Param) { this.Param = Param; } public Param getParam() { return Param; } public void setParam(Param param) { Param = param; } @Override public String toString() { return "Parameters [Param=" + Param + "]"; } }
Param:
<span style="font-family:Courier New;font-size:12px;">public class Param { private String Location; private String ValidateMethod; public Param(String Location) { this.Location = Location; } public Param(String Location, String ValidateMethod) { this.Location = Location; this.ValidateMethod = ValidateMethod; } public String getLocation() { return Location; } public void setLocation(String location) { Location = location; } public String getValidateMethod() { return ValidateMethod; } public void setValidateMethod(String validateMethod) { ValidateMethod = validateMethod; } @Override public String toString() { return "Param [location=" + Location + ", validateMethod=" + ValidateMethod + "]"; } }</span>
由于我们需要实现类似:<field name="value">I am a Field.</Method>这样的效果。因此,我们需要实现一个Converter。这个很关键,也是我试了好久才解决的问题,在此也分享一下:
MethodConverter.java:
<span style="font-family:Courier New;font-size:12px;">import com.thoughtworks.xstream.converters.Converter; import com.thoughtworks.xstream.converters.MarshallingContext; import com.thoughtworks.xstream.converters.UnmarshallingContext; import com.thoughtworks.xstream.io.HierarchicalStreamReader; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; public class MethodConverter implements Converter { public boolean canConvert(Class clazz) { return clazz.equals(Method.class); } public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) { Method method = (Method)value; if (method!=null) { writer.addAttribute("Action", method.getAction()); writer.setValue(method.getValue()); } } @Override public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { Method method = new Method(); String action = reader.getAttribute("Action"); method.setAction(action); System.out.println(">>> Action: "+action); String value = reader.getValue(); System.out.println(">>> method: "+value+", NodeName: "+reader.getNodeName()); method.setValue(value); return method; } }</span>
测试代码:
1. Object生成XML
xStreanTest.java
<span style="font-family:Courier New;font-size:12px;"> import java.util.ArrayList; import java.util.List; import com.thoughtworks.xstream.XStream; public class xStreanTest { /** * @param args */ public static void main(String[] args) { GFRep gfrep = new GFRep("test"); Param param = new Param("location","validate method"); Parameters p = new Parameters(param); List<GFContext> ls = new ArrayList<GFContext>(); GFContext gfcontext = new GFContext("nav", "gf0001", gfrep, new Method("method","http://fdsf...."), p); ls.add(gfcontext); gfrep = new GFRep("test2"); param = new Param("location2","validate method2"); p = new Parameters(param); gfcontext = new GFContext("nav", "gf0002", gfrep, new Method("method2","http://fdsf...."), p); ls.add(gfcontext); gfrep = new GFRep("test3"); param = new Param("location3","validate method3"); p = new Parameters(param); gfcontext = new GFContext("nav", "gf0003", gfrep, new Method("method3","http://fdsf...."), p); ls.add(gfcontext); //GuidedFlows gf = new GuidedFlows(ls); Banner banner = new Banner("repname"); MainContext mc = new MainContext("ctx000001", banner, ls); UserDetails ud = new UserDetails("guest","JLJE89dd8DasGds6es", "starhub"); MLoginIR mir = new MLoginIR(ud, mc); XStream xstream = new XStream(); xstream.registerConverter(new MethodConverter()); xstream.alias("IR", MLoginIR.class); xstream.alias("UserDetails", UserDetails.class); xstream.alias("MainContext", MainContext.class); xstream.alias("Banner", Banner.class); //xstream.alias("GuidedFlows", GuidedFlows.class); xstream.alias("GFContext", GFContext.class); xstream.alias("GFRep", GFRep.class); xstream.alias("Parameters", Parameters.class); xstream.alias("Param", Param.class); //xstream.alias("RepName", RepName.class); xstream.aliasField("GuidedFlows", MainContext.class, "GFContext"); xstream.useAttributeFor(GFContext.class, "GFType"); xstream.useAttributeFor(Method.class, "Action"); String xml = xstream.toXML(mir); System.out.println(xml); MLoginIR m = (MLoginIR)xstream.fromXML(xml); System.out.println(m); } }</span>
2. XML转Object
xStreanTest2.java
<span style="font-family:Courier New;font-size:12px;">import java.util.ArrayList; import java.util.List; import com.thoughtworks.xstream.XStream; public class xStreanTest2 { /** * @param args */ public static void main(String[] args) { String xml = "TODO"; XStream xstream = new XStream(); xstream.registerConverter(new MethodConverter()); xstream.alias("IR", MLoginIR.class); xstream.alias("UserDetails", UserDetails.class); xstream.alias("MainContext", MainContext.class); xstream.alias("Banner", Banner.class); xstream.alias("GFContext", GFContext.class); xstream.alias("GFRep", GFRep.class); xstream.alias("Parameters", Parameters.class); xstream.alias("Param", Param.class); //xstream.alias("RepName", RepName.class); xstream.alias("Method", Method.class); xstream.aliasField("GuidedFlows", MainContext.class, "GFContext"); xstream.useAttributeFor(GFContext.class, "GFType"); xstream.useAttributeFor(Method.class, "Action"); MLoginIR newIR = (MLoginIR)xstream.fromXML(xml); System.out.println(newIR.getUserDetails()); List<GFContext> ls_gf = newIR.getMainContext().getGFContext(); Banner banner = newIR.getMainContext().getBanner(); System.out.println(banner); for(GFContext gf : ls_gf){ System.out.println("gf:"+gf); GFRep gfrep = gf.getGFRep(); System.out.println(gfrep); Parameters p = gf.getParameters(); System.out.println(p); Param p2 = p.getParam(); System.out.println(p2); Method m = gf.getMethod(); System.out.println(m); System.out.println("=================================="); } } } </span>
相关推荐
**XStream解析XML实例** 在Java开发中,处理XML数据是一项常见的任务,XStream库提供了一个简单而强大的方式来将Java对象序列化为XML,以及从XML反序列化回Java对象。这个实例将深入探讨如何使用XStream进行XML操作...
以下是使用XStream解析XML和POJO双向转化的基本步骤: 1. 引入XStream库:在Java工程中,需要添加XStream的jar包,通常可以通过Maven或Gradle等构建工具管理依赖。在这个项目中,"lib"目录下应该包含XStream的jar...
如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream <version>1.4.18 ``` 对于其他构建工具,如Gradle或 Ivy,也有相应的...
xstream方式解析及生成xml文件
总的来说,使用Xstream解析XML文件并存入MySQL数据库是一个常见的数据处理任务,它涉及XML解析、Java对象映射以及数据库操作等多个技术点。通过合理地组织代码,可以高效地完成这项工作,实现数据的无缝迁移和存储。
**XStream XML解析** XStream 是一个开源的 Java 库,它提供了一种简单而有效的方式来将 Java 对象序列化为 XML 和从 XML 反序列化回 Java 对象。这个库的强大之处在于其简洁的API和对复杂Java对象模型的处理能力。...
在`xmlAnalysis`文件夹中,可能包含了一个简单的Java程序,演示了如何使用DOM、SAX、StAX和XStream解析XML文件,并展示了XStream如何在JavaBean与XML之间进行转换。你可以运行这些代码,观察输出结果,以加深理解。...
如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream <version>1.4.15 ``` 一旦引入了Xstream,我们就可以开始定义我们的Java...
如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream <version>1.4.18 ``` 然后,你可以创建一个XStream实例,并配置它以处理...
如果你的项目是Maven管理的,可以在pom.xml文件中添加如下依赖: ```xml <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream <version>1.4.17 ``` 一旦引入了XStream,我们可以创建一个简单的...
Xstream是一款强大的Java库,用于实现Java对象与XML文档之间的转换。这种转换不仅支持基本数据类型,也适用于复杂的数据结构,包括自定义类和集合。Xstream的设计旨在简化序列化过程,使得开发者能够轻松地在Java...
在XStream解析XML文件时,通常需要两个关键的jar包: 1. **xpp3_min-1.1.3.4.O.jar**:这是Minimal XML Pull Parser(XPP3)的轻量级版本,它是一个高效的XML解析器,用于读取XML文档。XPP3被XStream用来解析XML流...
本教程将深入探讨如何使用XStream进行Java类与XML文件之间的互转解析。 首先,我们需要引入XStream库。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml <groupId>com.thoughtworks.xstream</groupId> ...
在压缩包中的"xml"文件可能是示例的XML数据,用于演示如何使用XStream进行序列化和反序列化操作。实际应用中,开发者可以根据这些知识对XML数据进行读取、解析和存储,提升开发效率和代码可读性。
如果你的项目是Maven工程,可以在pom.xml文件中添加以下依赖: ```xml <groupId>com.thoughtworks.xstream</groupId> <artifactId>xstream <version>1.4.19 ``` 对于Gradle项目,可以在build.gradle文件中...
通过本篇内容的学习,我们了解了XStream的基本原理以及如何使用它来读写XML文件。XStream不仅简化了XML与Java对象之间的转换过程,还提高了开发效率。在实际项目中,合理利用XStream可以有效地管理复杂的数据结构。
这篇博客“使用XStream是实现XML与Java对象的转换(6)--持久化”深入探讨了如何利用XStream进行持久化操作,使得对象状态能够持久保存到磁盘,同时也能够从XML文档中恢复。 首先,我们需要理解XStream的核心概念。...
《XStream解析依赖包详解》 在Java开发中,数据序列化是一个不可或缺的环节,它使得对象的状态可以被保存和恢复。XStream是一款强大的Java库,用于将Java对象转换为XML,反之亦然,极大地简化了序列化和反序列化的...
- `xmlpull-1.1.3.1.jar`:XML Pull API,它是轻量级的解析XML的库,用于XPP3。 5. **XML Pull Parsing**: - XML Pull Parsing是一种事件驱动的解析模型,与SAX类似,但更简单,不需要解析器的回调函数。XPP3库...
接着,使用`fromXML()` 方法解析XML字符串: ```java YourBeanClass bean = (YourBeanClass) xstream.fromXML(xmlString); ``` 在`beanToXml()` 方法中,同样需要初始化xStream实例,然后使用`toXML()` 方法将Bean...