XML技术
XML
概念
可扩展标记语言
用途
配置文件
使用框架时需要写配置文件
传输数据
在网络中传输数据时并不能传输JAVA对象,所以我们需要将JAVA对象转成字符串传输,其中一种方式就是将对象转为 XML 类型的字符串
xml和html区别
xml语法严格,html语法松散
xml标签自定义,html标签预定义
XML基本语法
文件后缀名是xm第一行必须是文档声明
<?xml version="1.0"?>
有且仅有一个根标签
<students>
</students>
属性值必须用引号 (单双都可) 引起来
标签必须正确关闭
标签名区分大小写
XML组成部分
文档声明
#### 属性列表 version:版本号(必须) encoding:编码方式 ### 标签 XML中标签是自定义的,标签名要求 - 包含数字,字幕,其他字符 - 不呢个以数字和标点符号开头 - 不能包含空格 ### 指令 指令是结合 css 使用的,但现在XML 一般不结合 CSS,语法为: ```xml
### 属性
属性值必须用引号 (单双都可)引起来
### 文本
如果想原样展示文本,需要设置CDATA区,格式为:
## 约束
### 概念
约束是一个文件,可以规定 xml 文档的书写规则。我们作为框架的使用者,不需要会写约束文件,只要能够在 xml中引入约束文档,简单的读懂约束文档即可。XML 有两种约束文件类型: DTD和Schema。
### DTD约束
#### 引入
```xml
本地:<!DOCTYPE 根标签名 SYSTEM "dtd 文件的位置">
网络:<!DOCTYPE 根标签名 PUBLIC "dtd 文件的位置">
<!ELEMENT students (student*)!ELEMENTstudent (name, age, sex)>
<!--根节点,可以按顺序放name,age,sex节点-->
<!ELEMENT name (#PCDATA)>
<!--子节点,内容为文本类型-->
<!ELEMENT age(#PCDATA)>
<!ELEMENT sex:(#PCDATA)>
<!ATTLIST student number ID #REQUIRED>
<!--子节点student,属性可以有ID类型的number属性 必须的不能为空-->
<?xml version="1.0"?>
<!DOCTYPE students SYSTEM "student.dtd">
<students>
<student number="baizhan001">
<name>喜洋洋</name>
<age>10</age>
<sex>男</sex>
</student>
<student number="baizhan002">
<name>美羊羊</name>
<age>8</age>
<sex>女</sex>
</student>
</students>
Schema约束
引入
DTD全名Document Type Definition,文档类型定义
XSD全称是XML Schema Definition,XML Schema 定义
xmlns全称xmlns,web.xml文件用到的命名空间
xsi全称xml schema instance,web.xml遵守xml规范
xsi:schemaLocation是指具体用到的schema资源
引入
(1)写xml文档的根标签
<?xml version="1.0"?>
(2) 引入xsi前缀:确定 Schema 文件的版本
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
(3) 引入Schema 文件
xsi:schemaLocation="Schema 文件定义的命名空间 Schema文件的具体路径
(4)为 Schema 约束的标签声明前缀
xmlns:前缀="Schema 文件定义的命名空间"
<a:students
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.yxh.cn/xml student.xsd"
xmlns:a="http://www.yxh.cn/xml"
>
</a:students>
约束图解
XML解析
XML解析即读写XML文档中的数据。框架的开发者通过 XML解析读取框架使用者配的参数信息,开发者也可以通过 XML解析读取网络传来的数据
XML解析思想
DOM
将标记语言文档一次性加载进内存,在内存中形成一棵dom树
优点:操作方便,可以对文档进行CRUD的所有操作
缺点:占内存
SAX
逐行读取,基于事件驱动的。
优点:不占内存,一般用于手机APP开发中读取XML
缺点 :只能读取,不能增删改
常见解析器
JAXP
SUN公司提供的解析器 ,支持DOM和SAX两种思想
DOM4J
主要支持 DOM
Jsoup
是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的API,可通过 DOM,CSS 以及类似于jQuery 的操作方法来取出和操作数据
PULL
Android操作系统内置的解析器,支持SAX思想
Jsoup使用步骤
导入jar包
ClassLoader classLoader=Demo1.class.getClassLoader();
//利用类加载器通过文件相对路径找到绝对路径
String path = classLoader.getResource("com/yxh/xml/xsd/student.xml").getPath();
//加载入内存,解析成Dom树对象
Document document = Jsoup.parse(new File(path),"utf-8");
//获取标签对应的Element对象
Elements name =document.getElementByTag("name");
//获取对象
for(Element element:name){
String text = element.text();
System.out.println(text);
}
常用对象
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 getElementByld(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解析
使用方法
//1.导入Xpath的jar包
//2.获取 Document 对象
ClassLoader classLoader=Demo1.class.getClassLoader();
//利用类加载器通过文件相对路径找到绝对路径
String path = classLoader.getResource("com/yxh/xml/xsd/student.xml").getPath();
//加载入内存,解析成Dom树对象
Document document = Jsoup.parse(new File(path),"utf-8");
//3.将Document 对象转为JXDocument 对象
JXDocument jxDocument = new JXDocument(document);
// 4.JXDocument调用 selN(String xpath),获取 List<JXNode>对象。
List<JXNode> jxNodes=jxDocument.selN("//name");
//5.遍历 List<JXNode>,调用JXNode的getElement(),转为 Element 对象。
for(JXNode jxNode:jxNodes){
Element ele = jxNode.getElement();
//6.处理 Element 对象
System.out.println(element.text());
}
使用 Jsoup 完成网页爬虫
网络爬虫 (web crawler) : 自动抓取互联网信息的程序。
Jsoup 可以通过 URL 获取网页的 HTML 源文件,源文件中包含着网站数据,我们可以解 HTML 源文件的数据来获取我们需要的信息
//1. 引入jar 包。
//2.使用Jsoup 获取网页 HTML 源文件,转为 Document 对象
Jsoup.parse(new URL("http://daily.zhihu.com/story/9734946"),3000);
//3.通过 Document 对象,获取需要的 Element 对象
//获取头图.标题 .作者.正文
Elements headerImg = document.getElementByAttributeValue("alt","头图");
Elements headEle = document.select(".DailyHeader-title");
Elements authorEle = document.select(".author");
Elements contentEle = document.select(".content");
//4.获取 Element 对象的数据
String header = headerImg.get(0).attr("src");
String head = headEle.text();
String author = authorEle.text();
String content = contentEle.text();
//5.设置循环自动爬取
使用XML配置爬虫程序的参数
爬虫程序有一些参数需要配置,如果直接将参数写在JAVA 程序中,则修改参数非常不方便,所以此时我们将参数写在 XML配置文件中,通过解析 XML文件获取参数的配置信息
<?xml version="1.0"?>
<Crawler>
<min>111</min>
<max>999</max>
</Crawler>