文章目录

  • 1 概念
  • 2 语法
    • 2.1 基本语法
    • 2.2 组成部分
    • 2.3 约束
      • 2.3.1 使用DTD约束
      • 2.3.2 使用Schema约束
  • 3 解析
    • 3.1 将文档中的数据读到内存
    • 3.2 XML常见的解析器
  • 4 Jsoup
    • 4.1 使用Jsoup
    • 4.2 对象的使用
      • 4.2.1 Jsoup对象
      • 4.2.2 Document对象
      • 4.2.3 Element对象
    • 4.3 快捷查询方式
      • 4.3.1 selector选择器
      • 4.3.2 XPath

1 概念

Extensible Markup Language 可扩展标记语言

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

功能:存储数据

  • 配置文件
  • 在网络中传输

xml和html的区别

  • xml的标签都是自定义的 html的标签都是预定义的
  • xml语法严格 html语法松散
  • xml是存储数据的 html是展示数据的

2 语法

2.1 基本语法

  • 后缀名是.xml
  • 第一行必须定义为文档声明
  • <?xml version="1.0" encoding="utf-8" ?>
  • xml中有且仅有1个根标签
  • 属性值必须使用引号引起来
  • 标签必须有结束
  • xml标签区分大小写

2.2 组成部分

  • 文档声明:<?xml 属性列表 ?>
    属性列表:version版本号、encoding编码方式(默认ISO-8859-1)、standalone是否独立('yes’不依赖其他文件/'no’依赖其他文件)
  • 指令:结合css控制样式(了解)<?xml-stylesheet type="text/css" href="#.css" ?>
  • 标签:名称自定义。数字、标点不能开头,名称不能以xml开头,名称不能包含空格。
  • 属性:id属性唯一
  • 文本:CDATA区,在这个区域的内容会原样展示< ! [ CDATA [ 展示数据 ] ] >

2.3 约束

约束:规定xml文档的书写规则
目标:在xml中引入约束文档,读懂约束文档

分类

  • DTD:一种简单的约束技术
  • Schema:一种复杂的约束技术

2.3.1 使用DTD约束

将dtd文档引入xml文档
-<!DOCTYPE 根标签名 SYSTEM "dtd文件位置">

<!ELEMENT students (student*) >
<!--根标签是students *表示子标签student可以出现多次-->
<!ELEMENT student (name,age,sex)>
<!--student有三个子标签可以出现1次-->
<!ELEMENT name (#PCDATA)>
<!--子标签的数据类型是PCDATA-->
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST student number ID #REQUIRED>
<!--student必须有id-->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE students SYSTEM "student.dtd"><students><student number="itcast_0001"><name>tom</name><age>18</age><sex>male</sex></student>
</students>

2.3.2 使用Schema约束

可以约束标签的属性值
引入约束:首先填写根标签,然后引入xsi前缀,引入xsd文件命名空间,给每个xsd约束声明一个前缀作为标识

3 解析

3.1 将文档中的数据读到内存

操作xml文档将文档中的数据读取到内存中

解析XML的方式:服务端一般用DOM 移动端一般用SAX

  • DOM : 将标记语言文档一次性加载进内存,在内存中形成一棵DOM树。
    优点:操作方便,可以对文档进行CRUD的所有操作
    缺点:消耗内存
  • SAX:逐行读取,基于事件驱动的。读一行释放一次。
    优点:不占内存
    缺点:只能读取,不能增删改

3.2 XML常见的解析器

  • JAXP:SUN公司提供的解析器,支持DOM和SAX两种思想
  • DOM4J
  • Jsoup:是一款HTML解析器,通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。可以直接解析URL地址和HTML文本内容
  • PULL:安卓OS内置的解析器,使用SAX方式。

4 Jsoup

4.1 使用Jsoup

  1. 导入jar包
  2. 获取Document对象
  3. 获取对应的标签Element对象
  4. 获取数据
    public static void main(String[] args) throws IOException {//获取xml的pathString path = JsoupDemo.class.getClassLoader().getResource("student.xml").getPath();System.out.println(path);/*E:/JavaLearn/project/JavaScript/out/production/JavaScript/student.xml*///解析xml文档 加载文档进内存 获取dom树Document document = Jsoup.parse(new File(path), "utf-8");//获取Element元素对象Elements elements = document.getElementsByTag("name");//获取第一个name的element对象Element element = elements.get(0);String name = element.text();System.out.println(name);}

4.2 对象的使用

主要对象

  • Jsoup是一个工具类,可以解析html或xml文档,返回Document对象
  • Document是文档对象,代表内存中的DOM树
  • Elements是元素Element对象的集合,可以当作ArrayList<Element>来使用
  • Element是元素对象,可以获取元素的属性和文本等
  • Node是节点对象,是以上对象的父亲。

4.2.1 Jsoup对象

Jsoup主要方法

  • Jsoup.parse(File in, String charset) 用来解析html和xml文档返回Document对象,参数是XML或HTML文件
  • Jsoup.parse(String html) 可以解析xml或html格式的字符串,返回DOM对象
  • Jsoup.parse(URL url, int timeoutMills) 通过网络获取指定的html或xml文档对象

爬虫解析HTML时常用

    public static void main(String[] args) throws IOException {URL url = new URL("https://www.baidu.com");Document parse = Jsoup.parse(url, 10000);System.out.println(parse);}

4.2.2 Document对象

  • getElementById(String id)根据id属性值获取唯一的element对象
  • getElementsByTag(String name)根据标签名获取元素对象的集合
  • getElementsByAttribute(String key)根据属性名称获取元素对象的集合
  • getElementsByAttributeValue(String key, String value)根据对应的属性名和属性值获取元素对象

4.2.3 Element对象

获取子元素对象

  • getElementById(String id)根据id属性值获取唯一的element对象
  • getElementsByTag(String name)根据标签名获取元素对象的集合
  • getElementsByAttribute(String key)根据属性名称获取元素对象的集合
  • getElementsByAttributeValue(String key, String value)根据对应的属性名和属性值获取元素对象

获取属性值

  • String attr(String key):根据属性名称获取属性值

获取文本内容

  • String text():获取文本内容
  • String html():获取标签体的所有内容 包括子标签的字符串内容
    public static void main(String[] args) throws IOException {String path = JsoupDemo.class.getClassLoader().getResource("student.xml").getPath();Document document = Jsoup.parse(new File(path), "UTF8");//通过DOM对象获取name标签 可以获取所有的name标签Elements elements = document.getElementsByTag("name");System.out.println(elements.size());//通过ELement对象获取name标签Element student = document.getElementsByTag("student").get(0);//第一个标签//通过Element对象获取子标签对象Elements name = student.getElementsByTag("name");System.out.println(name.size());//获取student的属性值String number = student.attr("number");System.out.println(number);//获取文本内容String text = elements.text();System.out.println(text);//仅获取文本System.out.println(elements.html());//获取子标签和文本}

4.3 快捷查询方式

4.3.1 selector选择器

  • Elements select(String cssQuery)
  • 语法:参考selector类的文档
    public static void main(String[] args) throws IOException {String path = JsoupDemo.class.getClassLoader().getResource("student.xml").getPath();Document document = Jsoup.parse(new File(path), "UTF8");//查询name标签Elements name = document.select("name");//标签选择器System.out.println(name+"\n");//查询id值为XXX的元素Elements select = document.select("#smalltom");System.out.println(select+"\n");//获取student标签并且number属性值为 001 的age子标签Elements select1 = document.select("student[number='001']");//1. 获取student标签并且number属性值为 001System.out.println(select1+"\n");//2. 获取001的student标签子标签Elements select2 = document.select("student[number='001'] > age");System.out.println(select2);}

4.3.2 XPath

XML路径语言,用来确定XML文档中查找信息的语言
对DOM树形结构进行操作
需要导入JsoupXpath的jar包
查询w3cshool的参考手册区使用XPath的语法进行查询

    public static void main(String[] args) throws IOException, XpathSyntaxErrorException {String path = JsoupDemo.class.getClassLoader().getResource("student.xml").getPath();Document document = Jsoup.parse(new File(path), "UTF8");//根据DOM对象创建JXDocumentJXDocument jxDocument = new JXDocument(document);//查询所有student标签List<JXNode> jxNodes = jxDocument.selN("//student");System.out.println(jxNodes+"\n");//查询所有student标签下的所有name标签List<JXNode> jxNodes1 = jxDocument.selN("//student/name");System.out.println(jxNodes1+"\n");//查询所有student标签下带id属性的name标签List<JXNode> jxNodes2 = jxDocument.selN("//student/name[@id]");System.out.println(jxNodes2+"\n");//查询所有student标签下带id属性的name标签 且属性值为XXXList<JXNode> jxNodes3 = jxDocument.selN("//student/name[@id='XXX']");System.out.println(jxNodes3);}

【JavaWeb】XML和Jsoup的相关内容相关推荐

  1. JavaWeb:XML总结

    JavaWeb:XML总结 目录 JavaWeb:XML总结 一:什么是XML? 二:xml语法: 三: xml约束: 四:XML解析思想: 一:什么是XML? XML:eXtensible Mark ...

  2. Spring 5 DI 相关内容 5.2 构造器 注入 5.2.5 构造器注入的一些问题

    Spring [黑马程序员2022新版SSM框架教程_Spring+SpringMVC+Maven高级+SpringBoot+MyBatisPlus企业实用开发技术] 5 DI 相关内容 文章目录 S ...

  3. Spring 5 DI 相关内容 5.3 自动配置 5.3.4 完成自动装配的配置

    Spring [黑马程序员2022新版SSM框架教程_Spring+SpringMVC+Maven高级+SpringBoot+MyBatisPlus企业实用开发技术] 5 DI 相关内容 文章目录 S ...

  4. python的txt、csv、ini、xml、excel文件相关操作

    python的txt.csv.ini.xml.excel文件相关操作 函数,一个用于专门实现某个功能的代码块(可重用) 内置函数 len.bin.oct.hex 等 自定义函数 # 定义了一个函数,功 ...

  5. iOS 发布APP关于IDFA的相关内容

    您的 App 正在使用广告标识符 (IDFA).您必须先提供关于 IDFA 的使用信息或将其从 App 中移除,然后再上传您的二进制文件. 如果出现下边这两张图,你就会感到蛋蛋的忧伤 还有这个 怎么解 ...

  6. golang实践LSM相关内容

    LSM LSM(log-structured merge-tree)是一种分层,有序,面向磁盘的数据结构,其核心思想是充分了利用了,磁盘批量的顺序写要远比随机写性能高出很多,在计算机科学中,日志结构的 ...

  7. Assembly--及相关内容

    Assembly--及相关内容 0.2672019.06.04 09:29:26字数 448阅读 88 De novo genome assembly Hybrid error correction ...

  8. Android开发环境——Eclipse ADT相关内容汇总

     Android开发环境将分为SDK相关内容.Eclipse ADT相关内容.模拟器AVD相关内容.调试器DDMS相关内容.日志LogCat相关内容.连接驱动ADB相关内容.内存泄露检测工具MAT相关 ...

  9. 基于KNN的相关内容推荐

    如果做网站的内容运营,相关内容推荐可以帮助用户更快地寻找和发现感兴趣的信息,从而提升网站内容浏览的流畅性,进而提升网站的价值转化.相关内容 推荐最常见的两块就是"关联推荐"和&qu ...

最新文章

  1. Kotlin 使用list.add 时候报错的处理方法
  2. 命令行调用springboot服务_Spring Boot命令行界面的使用
  3. 烂泥:通过vsphere给esxi添加本地硬盘
  4. duilib消息事件产生和分发解释
  5. 那些与 IE 相伴的日子
  6. erlang 读取confg文件异常 could not start kernel pid error in config file
  7. DAY8-Nessus漏洞扫描
  8. RobotFramework自动化测试框架-移动手机自动化测试Clear Text关键字的使用
  9. Python以TCp搭建小游戏服务器
  10. opencv 曲线拟合
  11. 关于触摸板设备USB映射虚拟桌面的VID与PID
  12. iOS中 断点下载详解 韩俊强的博客
  13. JAVA多线程设计模式篇 4、Guarded Suspension 模式——等我准备好了再来
  14. 消息服务器待办事项数据库,关联联系信息的工作管理系统及其方法
  15. 分享几个实用的神器APP系列(三)
  16. 74HC138芯片简析
  17. 伯努利分布(Bernoulli distribution)
  18. 以圆桌骑士为例浅尝HTML5游戏开发
  19. 多家企业宣布将终止与B站合作
  20. 网络安全通识全解|第15期 白帽、黑帽、灰帽,黑客的差异!

热门文章

  1. 移植U-Boot思路和实践 | 基于RK3399
  2. 文本或代码中 \n 和 \r 的区别
  3. QT——设置可执行文件图标
  4. python 爬虫是什么_“python爬虫“是什么呢?
  5. OpenCV_11 轮廓检测:图像的轮廓+绘制轮廓+轮廓近似+边界矩形+椭圆拟合+直线拟合
  6. 论文阅读 - TransNet and TransNet V2
  7. LeetCode 489. 扫地机器人(DFS)
  8. LeetCode 345. 反转字符串中的元音字母
  9. 程序员面试金典 - 面试题 17.05. 字母与数字(哈希map+思维转换)
  10. LeetCode 454. 四数相加 II(哈希)