![153922fc90db6548da73a0a8ac6a7568.png](https://i-blog.csdnimg.cn/blog_migrate/557e9d53f8febe1a50c2cac87d4ad2f2.jpeg)
【018】
1. XML概念和体系
(1) 简述XML的特点?
XML 指可扩展标记语言(EXtensible Markup Language),没有预定义标签,需要自行定义标签XML 主要作用是数据存储和传输(传输)而HTML 主要作用是用来显示数据(显示)
特点:
- XML 数据以纯文本格式存储
- 实现不同应用程序之间的数据通信
- 实现不同平台间的数据通信和数据共享
- 使用 XML 将不同的程序、不同的平台之间联系起来
(2) 一个标准的XML文档由什么组成?
根元素、属性、元素和文本组成
2. XML基本语法
(1) 简述XML的基本语法?
- 有且只有一个根元素
- XML 文档声明必须放在文档的第一行
- 所有标签必须成对出现
- XML 的标签严格区分大小写
- XML 必须正确嵌套
- XML 中的属性值必须加引号
- XML 中,一些特殊字符需要使用“实体”
- XML 中可以应用适当的注释
(2) 简述XML的命名规则?
- 名称可以包含字母、数字及其他字符
- 名称不能以数字或者标点符号开始
- 名称不能以字母 xml 开始
- 名称不能包含空格
3. Schema技术
(1) 简述什么是DTD验证及DTD验证的局限性?
DTD:验证XML是否有效
局限性:
1、DTD 不遵守 XML 语法
2、DTD 数据类型有限
3、DTD 不可扩展
(2) 什么Schema技术?使用Schema验证XML文档的步骤是什么?
Schema 是 DTD 的代替者,名称为 XML Schema,用于描述XML 文档结构,比 DTD 更加强大,最主要的特征之一就是XML Schema 支持数据类型
步骤:
- 创建 SchemaFactory 工厂
- 建立验证文件对象
- 利用 SchemaFactory 工厂对象,接收验证的文件对象,生成 Schema 对象
- 产生对此 schema 的验证器
- 要验证的数据(准备数据源)
- 开始验证
DOM方式解析XML数据
(3) 简述解析XML文件的方式有哪些?
- DOM 解析 (java 官方提供)
- SAX 解析(java 官方提供)
- JDOM 解析(第三方提供)
- DOM4J 解析(第三方提供)
(4) 简述DOM解析XML的步骤?
- 创建一个 DocumentBuilderFactory 的对象
- 创建一个 DocumentBuilder 对象
- 通过DocumentBuilder的parse(...)方法得到Document对象
- 通过 getElementsByTagName(...)方法获取到节点的列表
- 通过 for 循环遍历每一个节点
- 得到每个节点的属性和属性值
- 得到每个节点的节点名和节点值
测试代码:
<?xml version="1.0" encoding="UTF-8"?>
使用dom解析:
public
4. SAX方式解析XML数据
(1) 简述什么是SAX解析方式?
SAX,全称 Simple API for XML,是一种以事件驱动的XMl API,SAX 与 DOM 不同的是它边扫描边解析,自顶向下依次解析,由于边扫描边解析,所以它解析 XML 具有速度快,占用内存少的优点
(2) 简述SAX解析XML的步骤?
- 创建 SAXParserFactory 的对象
- 创建 SAXParser 对象 (解析器)
- 创建一个 DefaultHandler 的子类
- 调用 parse 方法
测试代码:
public class BookDeaultHandler extends DefaultHandler {
//重写第一个方法
/**解析xml文档开始时调用*/
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
System.out.println("解析xml文档开始");
}
/*解析xml文档结束时调用*/
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
System.out.println("解析xml文档结束");
}
/**解析xml文档中的节点时调用*/
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
super.startElement(uri, localName, qName, attributes);
//System.out.println("解析xml文档中的节点时调用");
/**判断,如果是book节点,获取节点的属性和属性值*/
if("book".equals(qName)){
//获取所有的属性
int count=attributes.getLength();//属性的个数
//循环获取每个属性
for(int i=0;i<count;i++){
String attName=attributes.getQName(i);//属性名称
String attValue=attributes.getValue(i);//属性值
System.out.println("属性名称:"+attName+"t属性值为:"+attValue);
}
}else if(!"books".equals(qName)&&!"book".equals(qName)){
System.out.print("节点的名称:"+qName+"t");
}
}
/**解析xml文档中的节点结束调用*/
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);
//System.out.println("解析xml文档中的节点结束调用");
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
String value=new String(ch,start,length);
if(!"".equals(value.trim())){
System.out.println(value);
}
}
}
TestSAXParse类:
public
5. JDOM解析XML数据
(1) 简述什么是JDOM?
JDOM 是一种解析 XML 的 Java 工具包,它基于树型结构,利用纯Java的技术对XML文档实现解析。所以适合于Java语言
(2) JDOM解析XML的步骤?
- 创建一个 SAXBuilder 对象
- 调用 build 方法,得到 Document 对象(通过 IO 流)
- 获取根节点
- 获取根节点的直接子节点的集合
- 遍历集合
测试代码:
public
6. DOM4J解析XML数据
(1) 简述DOM4J技术 ?
DOM4J 是一个 Java 的 XML API,是 JDOM 的升级品,用来读写 XML 文件的JDOM 的一种智能分支,它合并了许多超出基本 XML 文档表示的功能。它使用接口和抽象基本类方法。具有性能优异、灵活性好、功能强大和极端易用的特点。是一个开放源码的文件
DOM4J 解析 XML 的步骤
- 创建 SAXReader 对象
- 调用 read 方法
- 获取根元素
- 通过迭代器遍历直接节点
(2) 四种解析XML技术的特点?
- DOM 解析:形成了树结构,有助于更好的理解、掌握,且代码容易编写。解析过程中,树结构保存在内存中,方便修改。
- SAX 解析:采用事件驱动模式,对内存耗费比较小。适用于只处理 XML 文件中的数据时
- JDOM 解析:仅使用具体类,而不使用接口。API 大量使用了 Collections 类。
- DOM4J 解析:JDOM 的一种智能分支,它合并了许多超出基本 XML 文档表示的功能。它使用接口和抽象基本类方法。具有性能优异、灵活性好、功能强大和极端易用的特点。是一个开放源码的文件
实体类Book:
public
测试类:
public
7. XPATH技术快速的获取节点
(1) 简述XPATH技术?
XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力
(2) 使用XPATH技术快速获取节点需要做哪些准备工作?
- DOM4J 的 jar 包
- Jaxen 的 jar 包
- Xpath 中文文档
测试代码:
public