XML解析之Jsoup
操作xml文件
- 解析(读取):将文档中的数据解读到内存中
- 写入:将内存中的数据保存到XML文档中。持久化的存储
解析xml的方式
DOM:将标记语言文档一次性加载进内存,在内存中形成一颗dom树
优点:
操作方便,可以对文档进行CRUD(增删改查)的所有操作
缺点:
占内存
SAX:逐行读取,基于事件驱动
优点
不占内存
缺点
只能读取
常用的解析器:
- JAXP:sum公司提供的解析器,支持dom和sax两种思想
- DOM4J:优秀的解析器
- Jsoup:一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
- PULL:android系统内置解析器
Jsoup
快速入门
从URL,文件或字符串中刮取并解析HTML
查找和提取数据,使用DOM遍历或CSS选择器
操纵HTML元素,属性和文本
根据安全的白名单清理用户提交的内容,以防止XSS攻击
输出整洁的HTML
步骤:
- 导入jar包
- 获取Document对象
- 获取对应的标签Element对象
- 获取数据
代码:
xml文件:
<?xml version="1.0" encoding="UTF-8" ?>
<students>
<student number="heima_0001">
<name id="cat">tom</name>
<age>18</age>
<sex>male</sex>
</student>
<student number="heima_0002">
<name>jack</name>
<age>12</age>
<sex>male</sex>
</student>
</students>
测试代码:
public class JsoupTest {
public static void main(String[] args) throws IOException {
//获得路径path
String path = JsoupTest.class.getClassLoader().getResource("student.xml").getPath();
//解析
Document document = Jsoup.parse(new File(path), "utf-8");
//获取元素
Elements elements = document.getElementsByTag("name");
System.out.println(elements.size());
//获取数据
for (int i = 0; i < elements.size(); i++) {
System.out.println(elements.get(i).text());
}
}
}
对象的使用
Jsoup:工具类,可以解析html或xml文档,返回Document
parse方法
解析xml或html对象
public static Document parse(File in,String charsetName)throws IOException
Parse the contents of a file as HTML. The location of the file is used as the base URI to qualify relative URLs.
解析xml或html字符串
public static Document parse(String html)
Parse HTML into a Document. As no base URI is specified, absolute URL detection relies on the HTML including a
<base href>
tag.通过网络路径获取指定的html或xml的文档对象
public static Document parse(URL url,int timeoutMillis)throws IOException
Fetch a URL, and parse it as HTML. Provided for compatibility; in most cases use [
connect(String)
](file:///C:/Users/ada/AppData/Local/Temp/360zip$Temp/360$3/day32_xml/03_参考/jsoup/jsoup-1.11.2-javadoc/org/jsoup/Jsoup.html#connect-java.lang.String-)The encoding character set is determined by the content-type header or http-equiv meta tag, or falls back to
UTF-8
.等;
Document :文档对象。代表内存中的dom树
获取Element对象
- 根据标签名获取对象集合
public Elements getElementsByTag(String tagName)
Finds elements, including and recursively under this element, with the specified tag name.
- 根据属性名称获取对象集合
public Elements getElementsByAttribute(String key)
Find elements that have a named attribute set. Case insensitive.
- 根据对应的属性名和值获取元素对象集合
public Elements getElementsByAttributeValue(String key, String value)
Find elements that have an attribute with the specific value. Case insensitive.
- 根据ID属性获取唯一的element
public Element lastElementSibling()
Gets the last element sibling of this element
Elements :Element对象的集合。可以当作ArrayList来使用
Element :元素对象
- 获取子元素对象
- 获取属性值
- String attr(String key):根据属性名称获取属性值
- 获取文本内容
- String text():获取文本内容
- String html();获取标签体的所有内容
Node :节点对象
- Document和Element的父类
快速查询方式
selector:选择器
使用的方法:Elements select(String cssQuery)
样例:
public class JsoupTest {
public static void main(String[] args) throws IOException {
//获得路径path
String path = JsoupTest.class.getClassLoader().getResource("student.xml").getPath();
//解析
Document document = Jsoup.parse(new File(path), "utf-8");
//查询name标签
Elements elements = document.select("name");
System.out.println(elements.get(0).text());
//查询id
Elements id = document.select("#cat");
System.out.println(elements.get(0).select("name").text());
System.out.println("******************");
//查找student中number等于heima_0001
Elements select = document.select("student[number=\"heima_0001\"]");
System.out.println(select);
System.out.println("******************");
//查找student中number等于heima_0001中的age子标签
Elements select1 = document.select("student[number=\"heima_0001\"]>age");
System.out.println(select1);
}
}
XPath:
解释:
XPath 是一门在 XML 文档中查找信息的语言。
XPath 是 XSLT 中的主要元素。
XQuery 和 XPointer 均构建于 XPath 表达式之上
使用Jsoup的xpath需要额外导入jar包
查询w3cschool参考手册,使用xpath语法完成
public class JsoupXpath {
public static void main(String[] args) throws IOException, XpathSyntaxErrorException {
//获得路径path
String path = JsoupTest.class.getClassLoader().getResource("student.xml").getPath();
//解析
Document document = Jsoup.parse(new File(path), "utf-8");
//剧创建JXDocumnet对象
JXDocument jxDocument=new JXDocument(document);
//结合xpath语法查询
List<JXNode> jxNodes = jxDocument.selN("//student");
System.out.println(jxNodes); System.out.println("__________________________");
List<JXNode> jxNode = jxDocument.selN("//student[@number='heima_0001']");
System.out.println(jxNode);
}
}
XML解析之Jsoup的更多相关文章
- xml解析技术
本文总结Dom,sax解析, 使用Java作为工具解析xml文档. 1 Dom 综述:Dom解析xml通常也称为xmlDom (和htmlDom技术差不多),将xml文档封装成树,好处就是xml中的 ...
- Duilib源码分析(三)XML解析器—CMarkup
上一节介绍了控件构造器CDialogBuilder,接下来将分析其XML解析器CMarkup: CMarkup:xml解析器,目前内置支持三种编码格式:UTF8.UNICODE.ASNI,默认为UTF ...
- JSON解析和XML解析对比
JSON解析和XML解析是较为普遍的两种解析方式,其中JSON解析的市场分额更大.本文系统的分析两种解析方式的区别,为更好地处理数据作准备.由于目前阶段主要是做移动开发,所以本文所描述的JSON解析和 ...
- 【Android】实现XML解析的几种技术
本文介绍在Android平台中实现对XML的三种解析方式. XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能. 在 ...
- 定位和xml解析和gson解析加上拉加载,下拉刷新
这里的上拉加载,下拉刷新用到是依赖包 Mainactivity,xml解析和定位 package com.exmple.autolayout; import java.util.List; impor ...
- tinyxml一个优秀的C++ XML解析器
读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好. TinyXML是一个开源的解 ...
- PERL/LEX/YACC技术实现文本解析--XML解析
继周六的p_enum.pl后,再来一篇说说我用perl做的lex,yacc工具.之前说了,我学习lex和yacc的最初动机是为了做个C语言解释器的SHELL:但后来工作中的实际需要也是制作perl版l ...
- 基本XML解析---编写
#import "ViewController.h" #import "DDXML.h" @interface ViewController () @end @ ...
- iOS-数据解析XML解析的多种平台介绍
在iPhone开发中,XML的解析有很多选择,iOS SDK提供了NSXMLParser和libxml2两个类库,另外还有很多第三方类库可选,例如TBXML.TouchXML.KissXML.Tiny ...
随机推荐
- Html中解决点击 a 标签刷新的问题,实现点击时不刷新
Html中解决点击 a 标签刷新的问题 我们可以在 <a href=""></a>中,将地址属性href设置为“#” 例如 <a href=" ...
- VMware workstation Windows 10虚拟机安装步骤
1. 在首页点击创建新的虚拟机 2. 选择典型,下一步 3.选择稍后安装操做系统,下一步. 4. 选择第一个Microsoft Windows,版本选择如图. 5. 选择安装位置,我放在D盘. 7. ...
- js仓库。。。
<script type="text/javascript" src="//ra.revolvermaps.com/0/0/8.js?i=0ln1fndtptz&a ...
- MS12-042 用户态调度机制特权提升漏洞
漏洞编号:MS12-042 披露日期: 2012/6/12 受影响的操作系统:Windows 2000;XP;Server 2003;windows 7;Server 2008; 测试系统:windo ...
- 数据结构c语言
这篇博客是为了对数据结构进行一系列的学习整理,包括线性表,栈和队列,串,数组和广义表,树和二叉树,图,动态储存管理,查找,内部排序,外部排序文件进行部分笔记的记录. 基本概念和术语 数据:是对客观事物 ...
- SVG系列 - 基础
标题为SVG基础,但是过于基础的东西就不再熬述啦,可以参考几个学习网址: SVG参考手册:http://www.runoob.com/svg/svg-reference.html MDN SVG:ht ...
- 打python&adb组合拳,实现微信读书永久免费读
用过“微信读书”的朋友都知道,如果我们想阅读全本的付费书籍,除了购买整本(使用书币)外,还可以使用无限卡.可无论是购买全书还是无限卡,归根结底都是要花银子的. 除此之外,还有一种方式——用阅读时长兑换 ...
- 详解 Redis 内存管理机制和实现
Redis是一个基于内存的键值数据库,其内存管理是非常重要的.本文内存管理的内容包括:过期键的懒性删除和过期删除以及内存溢出控制策略. 最大内存限制 Redis使用 maxmemory 参数限制最大可 ...
- 破解Android设备无法联调的谜题
这篇文章要感谢来自知乎的小伙伴:子非鱼,他最近被一件事情困惑,那就是:Android手机无法联调了.在解决完他的疑问后,突然意识到,其实自己在前一段时间也曾遇到同样的问题,最后居然还怀疑是电脑和手机不 ...
- Swagger Learing - Spring Boot 整合swagger
学习了一下swagger. 这是编写的Demo 源码 https://github.com/AmberBar/Learning/tree/master/swagger-learning/swagger ...