XML概述
概念
XML(Extensible Markup Language)可扩展标记语言
可扩展:标签自定义
用途
配置文件:在今后的开发过程当中我们会频繁使用框架(框架:半成品软件),使用框 架时,需要写配置文件配置相关的参数,让框架满足我们的开发需求。而我们写的配置文件 中就有一种文件类型是 XML。
传输数据:在网络中传输数据时并不能传输 java 对象,所以我们需要将 JAVA 对象转成字符串传输,其中一种方式就是将对象转为 XML 类型的字符串
基本语法(掌握)
- 文件后缀名是.xml
- 第一行必须是文档声明
- 有且仅有一个根标签
- 属性值必须用引号(单双都可)引起来
- 标签必须正确关闭
-
XML组成部分(掌握)
文档声明
文档声明必须放在第一行,格式为: <?xml 属性列表?>
属性列表:
version:版本号(必须)
encoding:编码方式
标签
XML 中标签名是自定义的,标签名有以下要求:
包含数字、字母、其他字符
- 不能以数字和标点符号开头
- 不能包含空格
属性名
属性值必须用引号(单双都可)引起来文本
如果想原样展示文本,需要设置 CDATA 区,格式为: <![CDATA[文本]]>
约束
按照框架提供的约束是一个文件,规定XML的书写规则
我们作为框架的使用者,不需要会写约束文件,只要能够在 xml 中引入约束文档,简单的读懂约束文档即可。XML 有两种约 束文件类型:DTD 和 Schema。DTD约束(不常用)
DTD约束
引入:
本地:<!DOCTYPE 根标签名 SYSTEM "dtd文件位置">
网络:<!DOCTYPE 根标签名 PUBLIC "dtd文件位置""dtd文件路径">
Schema约束(常用)
```xml 引入: (1)写 xml 文档的根标签 (2)引入 xsi 前缀:确定 Schema 文件的版本。 xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“ (3)引入 Schema 文件 xsi:schemaLocation=”Schema 文件定义的命名空间 Schema 文件的具体 路径” (4)为 Schema 约束的标签声明前缀 xmlns:前缀=”Schema 文件定义的命名空间”
例如:
<?xml version=”1.0” encoding=”UTF-8” ?>
<a name="uH3CZ"></a>
# XML解析(读写 XML 文档中的数据)
<a name="dcvhO"></a>
## XML解析用途
- 框架开发者通过 XML 解析读取框架使用者配置的参数信息
- 开发者也可以通过 XML 解析读取网络传来的数据
<a name="my7P2"></a>
## XML解析思想
- **DOM**:将标记语言文档一次性加载进内存,在内存中形成一颗 dom 树
- 优点:操作方便,可以对文档进行 CRUD 的所有操作
- 缺点:占内存
- SAX:逐行读取,基于事件驱动的。
- 优点:不占内存,一般用于手机 APP 开发中读取 XML
- 缺点:只能读取,不能增删改
<a name="pRhU6"></a>
## Jsoup解析器(掌握)
<a name="UwayD"></a>
### 快速入门
```java
//获取XML中所有学生姓名
public static void main(String[] args) throws IOException {
//(1)、导入jar包为module library
//(2)、加载XML文档进内存,获取DOM数对象Document
/**
* ①找到XML的绝对路径
* ②利用类加载器通过项目中文件的相对路径找到硬盘中文件的绝对路径
* ③根据XML的绝对路径,把XML加载进内存,并解析成Dom树对象
*/
ClassLoader classLoader = Demo01.class.getClassLoader();
String path = classLoader.getResource("com/bzcxy/xml/xsd/student.xml").getPath();
Document document = Jsoup.parse(new File(path),"utf-8");
//(3)、获取对应的标签:Element对象
Elements name = document.getElementsByTag("a:student");
//(4)、获取数据
for (Element element:name){
String text = element.text();
System.out.println(text);
}
}
Jsoup常用对象
Jsoup:解析 xml 或 html,形成 dom 树对象。
常用方法:
- static Document parse(File in, String charsetName):解析本地文件
- static Document parse(String html):解析 html 或 xml 字符串
static Document parse(URL url, int timeoutMillis):解析网页源文件
Document:xml 的 dom 树对象
常用方法:
Element getElementById(String id):根据 id 获取元素
- Elements getElementsByTag(String tagName):根据标签名获取元素
- Elements getElementsByAttribute(String key):根据属性获取元素
- Elements getElementsByAttributeValue(String key,String value):根据属性名 =属性值获取元素。
Elements select(Sting cssQuery):根据选择器选取元素。
Element: 元素对象
常用方法:
String text():获取元素包含的纯文本。
- String html():获取元素包含的带标签的文本。
- String attr(String attributeKey):获取元素的属性值
XPath解析(掌握)
public static void main(String[] args) throws IOException, XpathSyntaxErrorException {
/**
* XPath 即为 XML 路径语言,它是一种用来确定标记语言文档中某部分位置的语言。
* 使用方法:
* 1. 导入 Xpath 的 jar 包
* 2. 获取 Document 对象
* 3. 将 Document 对象转为 JXDocument 对象
* 4. JXDocument 调用 selN(String xpath),获取 List<JXNode>对象。
* 5. 遍历 List<JXNode>,调用 JXNode 的 getElement(),转为 Element 对象。
* 6. 处理 Element 对象
*/
ClassLoader classLoader = com.bzcxy.xml.jsoup.Demo01.class.getClassLoader();
String path = classLoader.getResource("com/bzcxy/xml/xsd/student1.xml").getPath();
Document document = Jsoup.parse(new File(path),"utf-8");
JXDocument jxDocument = new JXDocument(document);
List<JXNode> jxNodes = jxDocument.selN("//student[@number='baizhan_0002']/name");
for (JXNode jxNode : jxNodes) {
Element element = jxNode.getElement();
System.out.println(element.text());
}
}
XML配置Java程序参数案例(掌握)
XML代码
<?xml version="1.0" encoding="UTF-8" ?>
<Crawler>
<min>9742000</min>
<max>9742122</max>
</Crawler>
Java代码
int min = 0;
int max = 0;
try {
// 2.解析 XML 配置文件:加载 XML 文件到内存,转为 Document 对象。
String path =
CrawlerDemo.class.getClassLoader().getResource("com/baizhan/xml/crawler/Crawler.xml").getPath();
Document document = Jsoup.parse(new File(path), "utf-8");
// 3.获取 XML 配置文件的配置信息(法一:Jsoup 法二:XPath)
JXDocument jxDocument = new JXDocument(document);
List<JXNode> minNodes = jxDocument.selN("//min");
List<JXNode> maxNodes = jxDocument.selN("//max");
Element minElement = minNodes.get(0).getElement();
Element maxElement = maxNodes.get(0).getElement();
String maxStr = maxElement.text();
String minStr = minElement.text();
// 4.将配置信息应用于爬虫程序中
min = Integer.parseInt(minStr);
max = Integer.parseInt(maxStr);
} catch (IOException e) {
e.printStackTrace();
} catch (XpathSyntaxErrorException e) {
e.printStackTrace();
}