JAVA对象和XML文档、原来他们之间还有这一出

  最近项目开发中遇到一个问题,访问接口不再通过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;
    }

}

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

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

程序结构设计的有点不合理,,有点啰嗦。。目前只体现出程序的功能。。。

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

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

时间: 2024-10-18 22:41:31

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

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

位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效果可能会不理想 首先来了解点Java DOM 的 API:1.解析器工厂类:DocumentBuilderFactory 创建的方法:DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 2.解析器:DocumentBuilder 创建方法:通过解析器工厂类来获得 DocumentBu

XML编程总结(七)——使用XPath对象查询xml文档

(七)使用XPath对象查询xml文档 XPath,一种为查询 XML 文档而设计的查询语言.XPath 并不是 Java 语言,事实上 XPath 不是一种完整的编程语言.有很多东西用 XPath 表达不出来,甚至有些查询也无法表达.幸运的是,可以把 XPath 结合到 Java 程序中,这样就能发挥两者的优势了:Java 做 Java 所擅长的,XPath 做 XPath 所擅长的.Java 程序执行 XPath 查询所需要的应用程序编程接口(API)还因形形色色的 XPath 引擎而各不相

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

继续接上一文,这一阵子因为公司项目加紧,导致最后一个解析xml文档的方式,还没有总结,下面总结使用dom4J解析xml. DOM4J(Document Object Model for Java) 使用dom4j解析,个人认为是四种解析方式里面最方便的一种,DOM4J是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件.如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML,特别值得一提的是连Sun的JAXM也在用D

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

接上一篇,本文介绍使用JDOM解析xml文档, 首先我们还是应该知道JDOM从何而来,是Breet Mclaughlin和Jason Hunter两大Java高手的创作成果,2000年初, JDOM作为一个开放源代码项目正式开始研发.JDOM是一种解析XML的Java工具包. JDOM基于树状结构,利用纯JAVA技术对XML文档实现解析.生成.序列化及其它操作. 我们从以下步骤开始解析: (1).通过JDOM的API创建一个SAXBuilder的对象 SAXBuilder saxBuilder

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

主要的几个功能: 1.完成多条Emp信息的XML描述2.读取XML文档解析Emp信息3.将Emp(存放在List中)对象转换为XML文档4.在XML文档中查找指定特征的Emp信息 dom4j,jaxen 官网下载页面: http://sourceforge.net/projects/dom4j/files/dom4j-2.0.0-ALPHA-2/ 也可以在网盘上面下载:http://yunpan.cn/cwaNde7UYN83d  提取码 e247 1 完成多条Emp信息的XML描述 1.1 问

xml基础及其解析xml文档

xml基础及其解析xml文档 xml基础及其解析xml文档 xml基础语法 中国特色乱码问题 写xml文件的工具 xml中使用的转义字符 处理指令已经过时 xml的两个重要的功能 xml注释 xml解析Java应用程序读取xml文件的内容 xml解析原理 xml解析工具 DOM4J使用 DOM4J中核心API 将xml文档从磁盘读进内存形成Document对象 读取所有的标签节点 读取所有的属性节点 读取所有的文本节点 解决上面提出的问题 xml基础语法 一个基本的xml构成: <!--vers

DOM4J与JDOM解析xml文档

1.   JDOM方式解析XML JDOM并不是java官方解析xml文档的方法,所以在进行文档解析前,需要下载JDOM的jar包:http://www.jdom.org/downloads/:并将其路径添加到当前项目中,或者把jar包拷贝到当前项目中. 同样地使用前面的books.xml文档进行解析: books.xml: <?xml version="1.0" encoding="UTF-8"?> <bookstore> <book

使用DOM解析XML文档

1.创建XML文档 <?xml version="1.0" encoding="UTF-8"?> <Students>     <student stuno="1001">       <name>张三</name>       <gender>男</gender>       <scores>100</scores>     </s

文档对象模型操作xml文档

简介 :文档对象模型(DOM)是一种用于处理xml文档的API函数集. 2.1文档对象模型概述 按照W3C的定义,DOM是“一种允许程序或脚本动态地访问更新文档内容,结构和样式的.独立于平台和语言的规范化接口.DOM是表示文档(比如HTML和XML)和访问.操作构成文档的各种元素的应用程序接口,它以树状结构表示HTML和XML文档,定义了遍历这个树和检查.修改树的节点的方法和属性. DOM的核心API还允许你创建和填充文件.加载文档并保存. 2.2DOM实现 微软的net框架在Systemx.x