第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);
}
浙公网安备 33010602011771号