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>

约束图解

img

img

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

img

使用 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>
posted @ 2023-05-13 17:17  YxinHaaa  阅读(0)  评论(0编辑  收藏  举报