WEB开发(6) 在Java开发中的XML

1caf8f93f9dd7d2d0330512c0d5bd1589bf.jpg

最大的优势就是可拓展性。

1a7b18d9d59748c440aa4d3bad140869d4a.jpg

用途

1. 存储数据

47aff5505d73e144626e94196fb9bcf31e4.jpg

2. 分离数据

bf2afa5c5c7c83f866e2764f49d36fbb28a.jpg

3. 交换数据

eac58718f9fcb453146e49f91a8eaca47d3.jpg23e5b150de1def0fd4083e9643e5a72c97f.jpg

4. 共享数据

0bd6c72e306420f7bc9424e03ce6729ba49.jpg

XML被设计为一种文档语言,”什么都不做“

XML技术架构

a81f850d1bff02beb15f13f661d3214aca9.jpg

1ade72f2d20cece6ee0d23fb28a0e3bc5e3.jpg

由于是一种文本语言,开发工具基本上常见的编辑器都能够胜任

一些语法点

231a36a4432233943cd60fe6f56d407222f.jpg

1. 文档声明

55634175f107545193bb6b070fe74e4c7dc.jpg

说明该文档是XML

2. 标记必须闭合

597f0e663c4b4ed54c2a50b318b0a7e4c0d.jpg

3. 必须合理地潜逃

f13a5e1c6b330cffa9a2b8d0259f3131f92.jpg

4. XML元素

f8a21810f2b5885a0246f87c2e34801269b.jpg

5. XML属性

58ae83b75089a917c4aefac8a785a77a5ef.jpg8de240b1db39eadd3b05a11c43825eae547.jpg

不严格区分单双括号

6. 只有一个根元素

c27ff3b9ae97529cb2a7aa66ff5157289ed.jpg

根元素<articles>必须是唯一的 

7. 大小写敏感

b1fef7916819880e49962b26aeaea03bd91.jpg

8. 空白被保留

8bae19330bfd43eff55bc674764386f3c71.jpg

9. 转义字符

256ce298afcce820654180032c49514b520.jpg

10. CDATA的使用

fb7790ad56064ec190ca034995d9eafe14a.jpg80755700fcde098a7b60c514ed5232800e4.jpg

<![CDATA[   xxx   ]]>

XML API

08909682ee9cc5e7fc5bdd08143bd5491c7.jpg

解析XML

8b9135235fe0d541709c71ca3b5465d312d.jpg

1. DOM解析

3deb14f295a4a88cbaee0bd439c34ba89a0.jpg048e4f5f36d5c5278788a4b60339d8ae551.jpg

类比HTML的DOM,是一样的。

一些要注意的问题

47fb21eb03f241901edf7e679539cffc361.jpg

78bf7639d05ba67967a9c981a31ef8f7239.jpg

2. SAX解析

d95ab4c3b03936aa92ecc16c7e27787e2a5.jpg

SAX是直接查找开始标签的,比DOM的查找效率要高

c75a8dc942526ee1318f0e9788d399a8506.jpg

ac679cffef8fb1a05224ebe449419e83fc0.jpg

使用API上来说,两者区别不大

JAVA类映射JAXB

类似bean的技术(名字就叫JAva Xml Bean嘛),把xml对象化,可以和Hibernate对比学习

06d38bd7b67b6f19ec8187f935311e13b08.jpg

原理

36303f162604393a04f904bae59368bf57a.jpg

daafaa9e3c056531699c5ee73ba88be3641.jpg

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
}

9e008d7bab8cc119dbf0efa42d48e5cb7bc.jpg

<!-- 那么对应的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();
		}
	}
}

46f4356f7d7b3a31031db52acfc8fd33a8f.jpg

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();
		}
	}
}

aea402500575d9aec9bffa0dcb5a7539f2b.jpg

f090ce5a282cfbd2e423c6c743b1d444696.jpg

此外,一些更加复杂的嵌套映射,可以用集合类来表示,如List<Article> list=new ArrayList<Article>();

731b9f96bd6aaafc8c432719f22af308c73.jpg

 

fd8fa179258c66f26fcc5cc58b109b7dfde.jpg

 

转载于:https://my.oschina.net/swanf/blog/3075484

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值