XML(EXtensible Markup Language)--可扩展标记语言--通用的数据交换的格式,实现计算机之 间目的文档的交换,而设计的文档内容的编写规范。
特点:
- XML与操作系统,编程语言的开发平台无关;
- 实现不同系统之间的数据交集
作用:
- 数据交互;
- 配置应用程序和网站;
- Ajax基石
XML文档结构
带有<>的叫做标记、标签、元素
<books>~~</books>----根元素:元素里面最外层的元素,成对出现,有且只有一个, 在最后位置的根元素有"/",例如 </book>
<book id="bk101">----------<book >----是一子元素,被包含的,需要缩进
<!--图书信息-->------------注释
//声明--开头
<?xml verson="1.0"encoding="UTF-8"?>
//文档结构----文档元素描述信息
<books>
<bookid="bk101">
<!--图书信息-->
<bookid="bk101">
<author>王珊</author>
<title>.NET高级编程</title>
<description>包含C#框架和网络编程等</description>
</book>
<bookid="bk102">
<author>李明明</author>
<title>.XML基础编程</title>
<description>包含XML基础概念和基本作用</description>
</book>
</books>
XML标签
XML文档内容有一系列标签元素组成
示例:
<元素名 属性名 = ”属性值” > 元素内容 </元素名>
空元素:-----3种是一样的
<name> </name>
<name></name>
<name/>
语法
属性值用双引号包裹;
一个元素可以有多个属性;
属性值中不能直接包含< “ &(不建议‘ >)
XML编写注意事项:
标签编写注意事项
- 所有XML元素都必须有结束标签-------</>
- XML标签对大小写敏感
- XML必须对正确的嵌套
- 同级标签以缩进对齐
- 元素名称可以包含字母、数字或者其他字符
- 元素名成不能以数字或者标点符号开始------<5name> x
- 元素名称中不能含空格 不能用: . - ;
转义符
注意:当元素中出现了很多特殊字符时,可以使用CDATA节-------原样输出!
如:
<description>< ! [ CDATA [ 讲解了元素<title>以及</title>的使用 ] ] ></description>
XML解析器
解析器类型
非验证解析器:检查文档格式是否良好!
验证解析器:使用DTD检查文档的有效性
DTD :文档类型定义,验证机制
解析XML技术
1.DOM
基于XML文档树结构的解析
适用于多次访问的XML文档
特点:比较消耗资源
2.SAX
基于事件的解析
适用于大数据量的XML文档
特点:占用资源少,内存消耗小
3.DOM4J
非常优秀的Java XML API
性能优异、功能强大
开放源代码
DOM解析XML
DOM介绍
文档对象模型
DOM把XML文档映射成一个倒挂的树
常用接口介绍:
DOM解析包:org.w3c.dom
常用接口 常用方法 说明
Document: NodeList 按文档顺序返回文档中制
表示整个XML文档 定标记名称的所有元素集合
Node该文档中树 NodeListgetChildNodes() 获取该元素的所有子节点,
的单个节点 返回节点集合
Element:XML文档 String getTagName() 获取元素名称中的一个元素
访问DOM树节点:
显示“收藏信息.xml”文件中收藏的手机品牌和型号
<?xml version="1.0" encoding="UTF-8"?>
<PhoneInfo>
<Brand name="华为">
<Type name="U8650"/>
<Type name="U8888"/>
<Type name="U6668"/>
</Brand>
<Brand name="苹果">
<Type name="iphone6"/>
<Type name="iphone7"/>
<Type name="iphone8"/>
</Brand>
</PhoneInfo>
DOM解析XML文件步骤:
创建解析器工厂对象
解析器工厂对象创建解析器对象
解析器对象指定XML文件创建Document对象
以Document对象为起点操作DOM树
1.使用DOM解析XML文件
2.收藏信息,xml对应的Document对象
3.获得DOM树,获得document对象
4.获取手机品牌以及型号的相关信息
DOM4J
信息类
<?xml version="1.0" encoding="UTF-8"?>
<animal>>
<an ID="s1">
<name>老王</name>
<brand>二哈</brand>
<color>绿色</color>
<gender>公</gender>
<age >5</age>
</an>
<an ID="s2">
<name>东东</name>
<brand>金丝猴</brand>
<color>棕色</color>
<gender>公</gender>
<age>6</age>
</an>
</animal>
动物类
import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
//解析animal XML文件,对xml查询、增加、修改、删除
public class AnimalDao {
//加载整个Document文档
public Document parse(String url) throws DocumentException{
SAXReader reader =new SAXReader();
Document document=reader.read(url);
return document;
}
public void query(Document document) throws DocumentException {
//先得到根节点animal
Element root=document.getRootElement();
//遍历根元素的所有子节点<animal>
Iterator es=root.elementIterator();
while(es.hasNext()){
Element animal=(Element)es.next();
Iterator its=animal.elementIterator();
while(its.hasNext()){
//得到每一个animal的所有子节点
Element el=(Element)its.next();
//得到子节点文本
String str=el.getText();
System.out.println(str);
} } }}
测试类
import org.dom4j.Document;
import org.dom4j.DocumentException;
public class Test {
public static void main(String[] args) {
AnimalDao ad=new AnimalDao();
try {
Document doc=ad.parse("animals.xml");
ad.query(doc);
} catch (DocumentException e) {
e.printStackTrace();
}}}