最近项目开发中遇到一个问题,访问接口不再通过url地址请求的方式,而是

通过socket发送xml格式的报文到指定服务器来进行信息的统一认证。。

因此组装xml格式的报文字符串以及解析服务器返回的xml格式的字符获得所需数据成了

解决问题的关键。。在这之前,以为会有点难。。。做完之后,然并卵,也就那么一回事。。。

  LZ主要用的xStream类。。这个类的完美地解决了XML文档和JAVA对象之间的转换。。

由于刚刚接触这个类。。。对于里面提供的很多功能还没细细挖掘。。只是简单地实现了

我想要实现的功能。。待后续有时间再细嚼慢咽、细细品味。。。

Entrance类:主要提供程序运行的入口。。。

      该类中包含了一个静态的generateHtml()方法、用于生成XML格式的字符串

package com.linjm.xml;

public class Entrance {

    public static void main(String[] args) {

        String html = generateHtml();

        System.out.println("############################");

        TagEntity tagEntity = XMLUtil.fromXml(html, TagEntity.class);

        System.out.println("解析HTML:");
System.out.println("title:" + tagEntity.getHead().getTitle()); System.out.println("输出类信息:");
System.out.println(tagEntity.toString());
} public static String generateHtml() {
TagEntity tagEntity = new TagEntity(); Head head = Init.initHead();
Body body = Init.initBody(); tagEntity.setHead(head);
tagEntity.setBody(body); String html = XMLUtil.toXml(tagEntity); String top = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n"; System.out.println("生成HTML:\n" + top + html); return html;
} }

先看下程序的运行结果吧。。。看完我们再看后面具体的代码结构。。。

生成HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Title</title>
<meta>Meta</meta>
<js>JavaScript</js>
<css>CSS</css>
</head>
<body>
<div>Div</div>
<span>Span</span>
<font>Front</font>
<input>Input</input>
</body>
</html>
############################
解析HTML:
title:Title
输出类信息:
head:[title:Title,meta:Meta,js:JavaScript,css:CSS],body:[div:Div,input:Input,font:Front,span:Span]

Init类:主要用于初始化XML中的Head和Body标签内的子标签内容。。。    

package com.linjm.xml;

public class Init {

    public static Head initHead() {
Head head = new Head(); head.setTitle("Title");
head.setMeta("Meta");
head.setJs("JavaScript");
head.setCss("CSS"); return head;
} public static Body initBody() {
Body body = new Body(); body.setDiv("Div");
body.setFont("Front");
body.setInput("Input");
body.setSpan("Span"); return body;
} }

TagEntity类:主要是包含了两个字段:head和body。

       也是最终xml中呈现的head标签和body标签。。。

        通过@XStreamAlias注解的方式定义标签中的xml显示内容。。。

       大家可以根据自己的需求定义不同的标签。。。

         head和body标签可根据需求不同而不同。。。

package com.linjm.xml;

import com.thoughtworks.xstream.annotations.XStreamAlias;

@XStreamAlias("html")
public class TagEntity {
@XStreamAlias("head")
private Head head; @XStreamAlias("body")
private Body body; public Head getHead() {
return head;
} public void setHead(Head head) {
this.head = head;
} public Body getBody() {
return body;
} public void setBody(Body body) {
this.body = body;
} public String toString() {
String str = "head:[" +
"title:"+ head.getTitle() +
",meta:"+ head.getMeta() +
",js:"+ head.getJs() +
",css:"+ head.getCss() +
"]," +
"body:[" +
"div:"+ body.getDiv() +
",input:"+ body.getInput() +
",font:"+ body.getFont() +
",span:"+ body.getSpan() +
"]";
return str;
} }

Head类:该实体类中定义了head标签中的子标签属性字段。。 。

      head标签中的子标签可依据具体实际情况而定

package com.linjm.xml;

import com.thoughtworks.xstream.annotations.XStreamAlias;

public class Head {

    @XStreamAlias("title")
private String title; @XStreamAlias("meta")
private String meta; @XStreamAlias("js")
private String js; @XStreamAlias("css")
private String css; public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public String getMeta() {
return meta;
} public void setMeta(String meta) {
this.meta = meta;
} public String getJs() {
return js;
} public void setJs(String js) {
this.js = js;
} public String getCss() {
return css;
} public void setCss(String css) {
this.css = css;
} }

Body类:该实体类中 定义了body标签中的子标签属性字段。。。

      body标签中的子标签可依据具体实际情况而定。。。

package com.linjm.xml;

import com.thoughtworks.xstream.annotations.XStreamAlias;

public class Body {
@XStreamAlias("div")
private String div; @XStreamAlias("span")
private String span; @XStreamAlias("font")
private String font; @XStreamAlias("input")
private String input; public String getDiv() {
return div;
} public void setDiv(String div) {
this.div = div;
} public String getSpan() {
return span;
} public void setSpan(String span) {
this.span = span;
} public String getFont() {
return font;
} public void setFont(String font) {
this.font = font;
} public String getInput() {
return input;
} public void setInput(String input) {
this.input = input;
} }

XMLUtil类:该类定义了xStream中组装XML字符串和解析XML字符串封装方法。。。

      toXml()方法用于将Java对象转为XML字符串;

      fromXml()方法用于解析XML字符串转换为Java对象。

package com.linjm.xml;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver; public class XMLUtil { /**
* @desc 将JAVA对象转XML字符串
* @author JimLy
* @date 20160423
* */
public static String toXml(Object obj) {
XStream xs = new XStream(new DomDriver());
xs.processAnnotations(obj.getClass()); return xs.toXML(obj);
} /**
* @desc 将XML字符串转JAVA对象
* @author JimLy
* @date 20160423
* */
@SuppressWarnings("unchecked")
public static <T> T fromXml(String xmlStr, Class<T> cls) {
XStream xs = new XStream(new DomDriver());
xs.processAnnotations(cls);
T obj = (T) xs.fromXML(xmlStr); return obj;
} }

  代码实现很简单,也并不是很复杂。。。基本上都是可以看得懂的。。。

为了不使代码篇幅太长,我还是分多个类文件写、就不都写在一个类文件中。。

程序结构设计上存在点瑕疵,,有点啰嗦。。目前只体现出程序的功能。。。

对于xStream也是初次涉及,,也许、大概可能吧、会存在更好的实现方法以及

程序设计上需要优化的地方另当别论。。。

  看完博文觉得对这个有点兴趣的话,可以自己动手code一番。。。

也不枉花了这么多时间来看,,既然看了就得有点收获不是吗。。。

需要用到的jar包:xstream-1.4.7.jar

JAVA对象和XML文档、原来他们之间还有这一出的更多相关文章

  1. 精讲 org.w3c.dom(java dom)解析XML文档

    org.w3c.dom(java dom)解析XML文档 位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效果可能会 ...

  2. org.w3c.dom(java dom)解析XML文档

    位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效果可能会不理想 首先来了解点Java DOM 的 API:1.解析 ...

  3. 详解xml文件描述,读取方法以及将对象存放到xml文档中,并按照指定的特征寻找的方案

    主要的几个功能: 1.完成多条Emp信息的XML描述2.读取XML文档解析Emp信息3.将Emp(存放在List中)对象转换为XML文档4.在XML文档中查找指定特征的Emp信息 dom4j,jaxe ...

  4. 浅谈用java解析xml文档(四)

    继续接上一文,这一阵子因为公司项目加紧,导致最后一个解析xml文档的方式,还没有总结,下面总结使用dom4J解析xml. DOM4J(Document Object Model for Java) 使 ...

  5. 浅谈用java解析xml文档(三)

    接上一篇,本文介绍使用JDOM解析xml文档, 首先我们还是应该知道JDOM从何而来,是Breet Mclaughlin和Jason Hunter两大Java高手的创作成果,2000年初, JDOM作 ...

  6. Java高级特性 第13节 解析XML文档(1) - DOM和XPath技术

    一.使用DOM解析XML文档 DOM的全称是Document Object Model,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树 ...

  7. dom4j解析xml文档全面介绍

    一.dom4j介绍 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点, ...

  8. 文档对象模型操作xml文档

    简介 :文档对象模型(DOM)是一种用于处理xml文档的API函数集. 2.1文档对象模型概述 按照W3C的定义,DOM是“一种允许程序或脚本动态地访问更新文档内容,结构和样式的.独立于平台和语言的规 ...

  9. 使用GDataXML生成、修改XML文档-陈棚

    使用GDXML生成XML文档的步骤如下. 1.调用GDataXMLNode的elementWithName:方法创建GDataXMLElement对象,对象作为XML文档的根元素. 2.调用GData ...

随机推荐

  1. SQL Server 2012实施与管理实战指南(笔记)——Ch6连接的建立和问题排查

    6.连接的建立和问题排查 会话的建立分成2个部分: 1.连接,即找到这个实例 2.认证,告诉sql server谁要连接 目录 6.连接的建立和问题排查 6.1协议选择和别名 6.1.1 服务器网络配 ...

  2. SQLServer 数据修复命令DBCC一览

    1. DBCC CHECKDB  重启服务器后,在没有进行任何操作的情况下,在SQL查询分析器中执行以下SQL进行数据库的修复,修复数据库存在的一致性错误与分配错误. use master decla ...

  3. SQL SERVER 查看数据库表的字段类型,是否允许为NULL,默认值,主键等

    )-- 表名 set @table_name='bqcform101' --============表结构 select 类别,表名or字段名,描述,字段类型,是否自增,允许为NULL,默认值 fro ...

  4. Jquery 的遍历,祖先、后代、同胞以及其过滤

    什么是遍历? jQuery 遍历,意为“移动”,用于根据其相对于其他元素的关系来“查找”(或选取)HTML 元素.以某项选择开始,并沿着这个选择移动,直到抵达您期望的元素为止. 下图展示了一个家族树. ...

  5. C++浅析——虚表和虚表Hook

    为了探究虚表的今生前世,先来一段测试代码 虚函数类: class CTest { public: int m_nData; virtual void PrintData() { printf(&quo ...

  6. 认识与入门 Markdown,Markdown教程

    一.认识 Markdown 在刚才的导语里提到,Markdown 是一种用来写作的轻量级「标记语言」,它用简洁的语法代替排版,而不像一般我们用的字处理软件 Word 或 Pages 有大量的排版.字体 ...

  7. MIT 6.824 : Spring 2015 lab1 训练笔记

    源代码参见我的github: https://github.com/YaoZengzeng/MIT-6.824 Part I: Word count MapReduce操作实际上就是将一个输入文件拆分 ...

  8. leetcode-Combinations 复习复习排列组合

    Combinations 题意: 根据给定的n和k,生成从1到n范围内长度为k的排列组合 示例: n=4 k=2 [[1, 2], [1, 3], [1, 4], [2, 1], [2, 3], [2 ...

  9. compass电子罗盘

    GPS       这个用过GPS的机油肯定不陌生.          还是 介绍一下i8000的电子罗盘.传统罗盘用一根被磁化的磁针来感应地球磁场,地球磁场与磁针之间的磁力时磁针转动,直至磁针的两端 ...

  10. 多个mysql解决方法

    有的时候工作需要之类的,需要多个mysql数据库,而默认开启的服务为c盘windows里的my.ini 1.设置好要用的my.ini2.关闭当前的mysql数据库服务3.将my.ini拷贝到C:\WI ...