第3.73课 上课 XML(可扩展标记语言), XML介绍, XML文档, XS…

3_73

XML(可扩展标记语言)

 XML介绍

1.XML的全称是可扩展标记语言(Extensible Markup Language)。它是w3c组织发布的。

 

2.XML的发展历史

 

3.XML语言的主要用途有:

1)描述在现实生活中经常出现的有关系的数据。除此以外,它还经常用作软件配置文件,以描述程序模块之间的关系。

2)XML还可以用跨平台的数据交换。

 

4.XML和HTML的主要区别:

1)HTML所有标记都已经固定下来,我们不能去创造新的标记。而在编写XML时,我们可以任意的创建新的标记,包括中文的标记。

2)HTML文档作为一种网页技术,主要用于向用户展现数据。而XML文档不能描述页面的排版和表现形式,它只是用于描述数据和数据的结构。

 

 

 

 

 

 

 XML文档

  文档声明

在编写XML文档时,需要先使用文档声明,声明XML文档的类型。

1)最简单的声明语法:

<?xml version="1.0" ?>

2)用encoding属性说明文档的字符编码:

<?xml version="1.0" encoding="GB2312" ?>

3)用standalone属性指定该文档是否需要引用其他资源,该属性只接受yes或no两个值:

<?xml version="1.0" encoding="GB2312" standalone="yes|no" ?>

--yes:不需要引用外部资源;

--no:需要引用外部资源。

 

 

  元素

1.XML元素又称为”标签“,一个标签分为开始标签和结束标签。

 

2.一个标签有如下几种书写形式:

--包含标签体元素:<网址>www.yayadou.com</网址>

--不含标签体的空元素:<a></a>,简写为:<a/>

 

3.XML文档必须有且只有一个根标签。

 

4.一个标签中也可以嵌套若干个子标签。但标签之间必须合理的嵌套。例如:

错误写法:<a>欢迎观看<b>丫丫豆Java课程视频</a></b>

正确写法:<a>欢迎观看<b>丫丫豆Java课程视频</b></a>

 

5.标签名称可以包含字母、数字、中文等一些可见字符,但是:

--不能以数字、下划线、xml(或XML、或Xml 等)开头;

--不能包含空格、逗号、问号等特殊字符;

 

6.标签的英文名称区分大小写。

例如:<P>和<p>是两个不同的标记。

 

 

 

 

 

 

  属性

1.元素属性提供了关于元素的额外信息。例如:

<parent>

<child sex="boy">

<subchild>.....</subchild>

</child>

</parent>

2.一个标签可以包含多个属性,但是属性的名称不能够重复。

3.属性值一定要用英文的双引号(")或单引号(')引起来。

4.定义属性必须遵循与标签相同的命名规范。

  文档注释

1.Xml文件中的注释的语法格式:

<!-- 注释内容 -->

2.注释定义需要注意的地方:

1)XML声明之前不能有注释。

2)XML注释不能出现在标记中。

3)XML注释不能嵌套,例如:

<!--大段注释

……

<!--局部注释-->

……

-->

 

  CDATA区/段

1.在编写XML文件时,有些内容可能不想让解析引擎解析执行,而是当作原始内容处理。例如:

<公式>

3 + 3 > 5

</公式>

 

2.遇到此种情况,可以把这些内容放在CDATA区里,对于CDATA区域内的内容,XML解析程序不会处理,而是直接原封不动的输出。

<公式>

<![CDATA[3 + 3 > 5]]>

</公式>

 

3.语法:<![CDATA[ 内容 ]]>

<![CDATA[

......

]]>

 

4.转义字符

对于一些单个字符,若想显示其原始样式,也可以使用转义的形式予以处理。

 

 

 XStream

  XStream介绍

xStream是一个轻易将Java对象和XML相互转换的工具,而且可以修改某个特定的属性和节点名称,而且也支持JSON的转换;

提供了所有的基础类型、数组、集合等类型直接转换的支持。

因此XML常用于数据交换、对象序列化(这种序列化和Java对象的序列化技术有着本质的区别)。

 

Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将javaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁琐。

 

XStream使用起来非常简单,不需要预先生成相关的辅助类,不需要映射文件。

当然,使用简单也注定了它只能处理简单结构的 XML 文件。

 

http://x-stream.github.io/

  生成

/**

* java对象转XML字符串或者XML文件

* @param args

* @throws IOException

*/

public static void main(String[] args) throws IOException {

User user = new User(168,"admin","123456","admin2","广东","广州",1,

new Date(),"1783322568@qq.com","10086" ,"广东广州");

//创建一个XStream对象并指定对应的解析驱动

XStream xs = new XStream(new DomDriver());

//指定根节点的名称

xs.alias("user", User.class);

//设置节点属性(参数1,什么对象的属性,参数2,属性名,参数3,属性别名)

xs.aliasAttribute(User.class, "userId", "uid");

 

//将java对象交给XStream对象,转换成XML格式的字符串

String userXML = xs.toXML(user);

 

System.out.println(userXML);

//将java对象交给XStream对象,并输出成xml文件,保存到磁盘中

xs.toXML(user, new FileWriter("user.xml"));

}

  User类

import java.util.Date;

 

public class User implements java.io.Serializable{

 

private static final long serialVersionUID = 1L;

private int id;

private String userId;

private String passWord;

private String name;

private String province;

private String city;

private int sex;

private java.util.Date birthday;

private String email;

private String phone;

private String address;

 

}

  解析

/**

* XML字符串或者XML文件转java对象

* @param args

*/

public static void main(String[] args) {

StringBuilder sb = new StringBuilder();

sb.append("<user uid='admin'><id>168</id>");

sb.append("<passWord>123456</passWord>");

sb.append("<name>admin2</name>");

sb.append("<province>广东</province>");

sb.append("<city>广州</city>");

sb.append("<sex>1</sex>");

sb.append("<birthday>2016-03-17 13:38:36.373 UTC</birthday>");

sb.append("<email>1783322568@qq.com</email>");

sb.append("<phone>10086</phone>");

sb.append("<address>广东广州</address>");

sb.append("</user>");

//创建XStream对象并绑定解析驱动类

XStream xs = new XStream(new DomDriver());

//设置别名与java类型的关系

xs.alias("user", User.class);

//设置属性别名对应属性的关系

xs.aliasAttribute(User.class, "userId", "uid");

//将xml字符串转换成java对象

//User user = (User)xs.fromXML(sb.toString());

//将xml文件转换成java对象

User user = (User)xs.fromXML(new File("user.xml"));

 

System.out.println(user);

 

}

posted on 2018-01-31 23:20  東風★破  阅读(259)  评论(0)    收藏  举报

导航