最大的优势就是可拓展性。
用途
1. 存储数据
2. 分离数据
3. 交换数据
4. 共享数据
XML被设计为一种文档语言,”什么都不做“
XML技术架构
由于是一种文本语言,开发工具基本上常见的编辑器都能够胜任
一些语法点
1. 文档声明
说明该文档是XML
2. 标记必须闭合
3. 必须合理地潜逃
4. XML元素
5. XML属性
不严格区分单双括号
6. 只有一个根元素
根元素<articles>必须是唯一的
7. 大小写敏感
8. 空白被保留
9. 转义字符
10. CDATA的使用
<![CDATA[ xxx ]]>
XML API
解析XML
1. DOM解析
类比HTML的DOM,是一样的。
一些要注意的问题
2. SAX解析
SAX是直接查找开始标签的,比DOM的查找效率要高
使用API上来说,两者区别不大
JAVA类映射JAXB
类似bean的技术(名字就叫JAva Xml Bean嘛),把xml对象化,可以和Hibernate对比学习
原理
xml(文档)=>schema(表格化)=>JAXB(对象化映射)=>Java Object(对象)
Java对象转化为XML(marshal)
先说说是怎么映射的。
package com.integrate.xml;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Article {
private String title;
private String author;
private String email;
private String date;
// 省略getter/setter
}
<!-- 那么对应的xml应该长这样 -->
<Article>
<title>丑小鸭</title>
<author>安徒生</author>
<email>antusheng@qq.com</email>
<date>1900-01-01</date>
</Article>
package com.integrate.xml;
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
public class JAXBDemo {
public static void main(String[] args) {
// 创建xml文档对象
File xmlFile=new File("D:\\Project Zijun\\Logiciels\\eclipse\\eclipse-workspace\\Integrate\\output\\test.xml");
// 声明JAXBContext上下文对象
JAXBContext context;
try {
// 通过指定映射创建上下文,Article类必须要有@XmlRootElement的注解哦!
context=JAXBContext.newInstance(Article.class);
// 通过上下文创建java转化为xml的对象Marshaller
Marshaller m=context.createMarshaller();
Article article=new Article(); // 创建XML中数据
article.setAuthor("Janet");
article.setDate("20080601");
article.setEmail("jj@yahoo.com");
article.setTitle("XML");
m.marshal(article, xmlFile); // 将java对象转化为XML
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.integrate.xml;
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
public class JAXBDemo {
public static void main(String[] args) {
File xmlFile=new File("D:\\Project Zijun\\Logiciels\\eclipse\\eclipse-workspace\\Integrate\\output\\test.xml");
JAXBContext context;
try {
context=JAXBContext.newInstance(Article.class);
// 就这里两句话不同
Unmarshaller un=context.createUnmarshaller(); // unmarshaller的获取
Article article =(Article) un.unmarshal(xmlFile); // xml到Article类的对象化
System.out.println(article.getAuthor());
System.out.println(article.getTitle());
System.out.println(article.getEmail());
System.out.println(article.getDate());
} catch (Exception e) {
e.printStackTrace();
}
}
}
此外,一些更加复杂的嵌套映射,可以用集合类来表示,如List<Article> list=new ArrayList<Article>();