首先我们要先了解这是一个什么解析器,我们都学习过XML文件,XML文件在被约束之后,我们怎么在程序中解析它呢?
解析XML文件的方式:
1.DOM:把标记语言文档一次性加载到内存中,形成一个DOM树
缺点:非常占内存,大约是文件大小的1000~10000;
优点:操作简单,可以对文档进行CRUD操作,也就是增删改查操作
2.SAM:逐行读取文件,它基于事件驱动(因为逐行读取,所有对每一行的含义的解析难度就增大了)
缺点:不可以修改文件,只可以读取文件
优点:几乎不占内存,因为每一次读取文件只读取一行,并且读取完之后就弹出了
了解了XML文件的解析方式之后,我们来看一下常见的XML文件解析器
1.JAXP:sun公司提供的解析器,两种解析思想都支持,但是不常用该解析器,可怜
2.DOM4J:一款优秀的解析器
3.JSOUP:jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。
它提供了一套 非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出
和操作数据。
4.PULL:Android操作系统的内置解析器,SAX方式的,毕竟手机内存非常珍贵
然后我们学习怎么去简单使用Jsoup解析器
jar包提取路径
提取码: brl9
public class JSoupDemo {
public static void main(String[] args) throws IOException {
//获取Document对象 根据
//获取student.XML文件的path
//获取SRC路径下的文件方式,--->CLassLoader 类加载器
//这个文件路径是相对于SRC文件的
String path =JSoupDemo.class.getClassLoader().getResource("student.xml").getPath();
System.out.println(path);
//解析XML文档,加载文件进内存,获取DOM树--->Document
Document parse = Jsoup.parse(new File(path), "utf-8");
//获取元素对象Element,它是一个ArrayList
Elements elements = parse.getElementsByTag("name");
System.out.println(elements.size());
//获取第一个name 的Element对象
Element element = elements.get(0);
//打印这个对象的数据
String name = element.text();
System.out.println(name);
}
}
上面的代码中获取Document对象使用的是Jsoup解析HTML,XML文档的一种方法,还有下面的两种方式:
parse(String HTML) 直接解析文档内容字符串,这种方法不常用,显然:太臃肿了
parse(URL url,int timeoutMillis):通过网络路径获取指定的HTML或XML文档,这种
是可以从网站中获取网页数据的
得到文档对象Document之后,我们就需要知道文档中存储的属性了
Element对象:
获取子元素对象:
getElementsByTag(String tagName):根据标签名称获取元素对象集合(指定属性为ID)
getElementsByAttribute(String key):根据属性名称获取元素对象集合
getElementsByAttributeValue(String key,String value)根据对应属性名和属性值获取元素对象集合
getElementByID(String id) :根据ID获取唯一的元素对象
获取属性值;
String attr(String key):根据属性名称获取属性值:
获取文本内容:
String text():获取文本内容
String html():获取标签体的所有内容,包括子标签的文本内容
这里要说明一下ELements对象,这些方法有一些是返回的这个对象,这个对象本质上其实就是一个ArrayList<\Element>集合,所以我们可以使用ArrayList集合的方法来查询集合中包含的Element对象.
下面说一下Node对象
这个对象是Element和Document对象的父类,它里面的方法在这两个对象中也是可以使用的,而Document是Element的子类
另外我们要了解一下快速查询方式:
虽然我们用上面的方式,层层获取对象,但是如果我们遇到一个复杂的XML文档,那我们的工作量就会变得很大,这个时候,我们要了解选择器的使用了
1.selector:选择器
使用的方式,Elements select(String cssQuery)
语法:参考selector类中定义的语法
详细的去看帮助文档
2.XPath
导入包:JsoupXpath-0.3.2.jar
查询W3CShool参考手册,使用XPATH的语法完成查询