• XML总结


    XML介绍

    XML(Extensible Markup Language):可扩展标记语言

    可扩展:标签都是自定义的。

    XML的历程:

    HTML和XML都是W3C(万维网联盟)制定的标准,最开始HTML的语法过于松散,于是W3C制定了更严格的XML语法标准,希望能取代HTML。但是程序员和浏览器厂商并不喜欢使用XML,于是现在的XML更多的用于配置文件及传输数据等功能

    是谁造成的HTML语法松散?

    浏览器厂商。最开始W3C制定HTML的时候语法还是比较严格的。但浏览器厂商为了抢占市场,语法错误也可以解析成功HTML,最后“内卷”到HTML即使语法非常混乱也是可以被浏览器解析。

    XML的功能

    1、配置文件

    在今后的开发过程当中我们会频繁使用框架(框架:半成品软件),使用框架时,需要写配置文件配置相关的参数,让框架满足我们的开发需求。而我们写的配置文件中就有一种文件类型是XML。

    日后编写大型项目,不可能从头到尾都是原创代码,很多功能前人已经写好,我们只需要使用前人写好的半成品软件(框架),再加入一些符合我们需求的配置即可完成开发。
    比如我们组装一台电脑,不可能自己焊接电路板。而是先买入一块主板,这块主板就是半成品软件。根据自己的需求加入一些配置,比如要求流畅运行吃鸡,就需要配置i7处理器、泰坦显卡。    

    2、传输数据

    在网络中传输数据时并不能传输java对象,所以我们需要将JAVA对象转成字符串传输,其中一种方式就是将对象转为XML类型的字符串。

    XML基本语法

    文件名后缀必须是xml

    第一行必须是文档声明

    标签区分大小写

    标签必须有回标签

    属性值必须用引号引起来

    XML的组成部分

    文档声明

    文档声明必须放在第一行,格式为:

    属性列表:

    • version:版本号(必须)
    • encoding:编码方式

    标签

    XML中标签名是自定义的,标签名有以下要求:

    • 包含数字、字母、其他字符
    • 不能以数字和标点符号开头,可以以_开头
    • 不能包含空格

    指令(了解)

    指令是结合css使用的,但现在XML一般不结合CSS,语法为:

    属性

    属性值必须用引号(单双都可)引起来

    文本

    如果想原样展示文本,需要设置CDATA区,格式为:

    约束:

    DTD约束:

    DTD是一种较简单的约束技术,引入方式如下:

    • 本地引入:
    • 网络引入:

     

    例:

    第一行:定义了根标签students,允许有多个子标签student

    第二行:定义student标签可以有三个子标签(name,age,sex)

    三、四、五行:定义了name,age,sex是文本类型

    最后一行:定义了student标签的number属性,值为id类型,number属性必须写

    Schema约束:

    Schema比DTD对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文件定义的命名空间"

    例如:

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xsi:schemaLocation="http://www.itbaizhan.cn/xml student.xsd"

        xmlns="http://www.itbaizhan.cn/xml"

    >

    XML解析思想:

    XML解析即读写XML文档中的数据。框架的开发者通过XML解析读取框架使用者配置的参数信息,开发者也可以通过XML解析读取网络传来的数据。XML有如下解析思想:

    DOM解析思想

    SAX解析思想

    DOM解析思想

    将标记语言文档一次性加载进内存,在内存中形成一颗dom树

    • 优点:操作方便,可以对文档进行CRUD的所有操作
    • 缺点:占内存

    学过js的兄嘚应该比较了解,也就是DOM操作嘛,将xml文件转为Document对象,从而可以使用Document对象对元素进行增删改

    SAX解析思想

    逐行读取,基于事件驱动的。

    • 优点:不占内存,一般用于手机APP开发中读取XML
    • 缺点:只能读取,不能增删改

    常见解析器:

    • JAXP:SUN公司提供的解析器,支持DOM和SAX两种思想
    • DOM4J:一款非常优秀的解析器
    • Jsoup:Jsoup是一款Java的HTML解析器,支持DOM思想。可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过CSS以及类似于jQuery的操作方法来取出和操作数据
    • PULL:Android操作系统内置的解析器,支持SAX思想

    Jsoup的作用

    Jsoup的作用就是将xml文件转为document对象,通过document对象对元素进行CRUD,js可以将html转为document对象,Jsoup可以将xml转为document对象

    Jsoup解析xml文件前需要做什么?

    导入Jsoup的jar包

    这个jar包我放在百度网盘了大家想要的通过下面这个链接直接领取吧

    链接:https://pan.baidu.com/s/1CM0t-dOyPAgPQcVPjU1S0w?pwd=04h9 
    提取码:04h9

    Jsoup获取Document对象

    Jsoup:可以解析xml或html,形成dom树对象。

    parse方法的重载:

    • static Document parse(File in, String charsetName):解析本地文件
    • static Document parse(String html):解析html或xml字符串
    • static Document parse(URL url, int timeoutMillis):解析网页源文件(timeoutMillis代表访问超时时间)

    Document对象获取Element元素对象

    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):根据css选择器选取元素。

    元素对象的常用方法

    Element: 元素对象

    常用方法:

    • String text():获取元素包含的纯文本。
    • String html():获取元素包含的带标签的文本。
    • String attr(String attributeKey):获取元素的属性值。

    例:

    通过Jsoup实现爬虫技术

    我们这里借用一下知乎日报,实现Jsoup爬虫技术

    因为Jsoup可以上传网络资源并转为Document对象,所以使用Jsoup完成爬虫是非常简单的,直接上代码把,我们可以根据知乎日报网站的源代码寻找作者、内容、标题、图片等等内容

    1. package com.baizhan.crawler;
    2. import org.jsoup.Jsoup;
    3. import org.jsoup.nodes.Document;
    4. import org.jsoup.select.Elements;
    5. import java.io.File;
    6. import java.io.IOException;
    7. import java.net.MalformedURLException;
    8. import java.net.URL;
    9. public class CrawlerDemo {
    10. public static void main(String[] args) throws IOException {
    11. //循环爬取数据
    12. int min = 0;
    13. int max = 0;
    14. //通过配置文件获取min和max的值
    15. String path = CrawlerDemo.class.getClassLoader().getResource("com/baizhan/crawler/Crawler.xml").getPath();
    16. Document d = Jsoup.parse(new File(path),"utf-8");
    17. min = Integer.parseInt(d.getElementsByTag("min").get(0).text());
    18. max = Integer.parseInt(d.getElementsByTag("max").get(0).text());
    19. for (int i = min; i <= max; i++){
    20. try{
    21. //通过Jsoup获取网络资源
    22. Document document = Jsoup.parse(new URL("http://daily.zhihu.com/story/"+i),5000);
    23. //System.out.println(document);
    24. //获取需要的Element对象
    25. Elements headerImgEle = document.getElementsByAttributeValue("alt","头图");
    26. Elements title = document.select(".DailyHeader-title");
    27. Elements authorEle = document.select(".author");
    28. Elements content = document.select(".content");
    29. //获取Element对象的数据
    30. System.out.println(headerImgEle.get(0).attr("src"));
    31. System.out.println(title.get(0).text());
    32. System.out.println(authorEle.get(0).text());
    33. System.out.println(content.get(0).text());
    34. System.out.println(i);
    35. }catch (Exception e){}
    36. }
    37. }
    38. }

    然后通过配置文件定义min和max标签,在类中直接读取标签就行了

     

     

  • 相关阅读:
    Python异常、模块与包
    企业级GitLab在Docker部署使用
    学习 vue3 第一天 vue3简介,创建vue3项目 Composition Api 初识
    在使用模方进行立面修整时,画折线双击结束后自动闭合,怎么不让它闭合?
    软件测试拿到项目之后该怎么做?请仔细看完这篇文章
    【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏3(附项目源码)
    MIT 6.S081 Operating System Lecture5 (随意的笔记)
    Spring Boot 整合 MyBatis
    刘二大人 PyTorch深度学习实践 笔记 P3 梯度下降算法
    3D激光SLAM:ALOAM---后端lasermapping 里程计到地图位姿更新维护
  • 原文地址:https://blog.csdn.net/cccccccmmm/article/details/126805660