共计 2938 个字符,预计需要花费 8 分钟才能阅读完成。
XML– 解析
博客说明
文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!
解析
操作 xml 文档,将文档中的数据读取到内存中
操作 xml 文档
- 解析 (读取):将文档中的数据读取到内存中
- 写入:将内存中的数据保存到 xml 文档中。持久化的存储
解析 xml 的方式
-
DOM:将标记语言文档一次性加载进内存,在内存中形成一颗 dom 树
- 优点:操作方便,可以对文档进行 CRUD 的所有操作
- 缺点:占内存
-
SAX:逐行读取,基于事件驱动的。
- 优点:不占内存。
- 缺点:只能读取,不能增删改
xml 常见的解析器
- JAXP:sun 公司提供的解析器,支持 dom 和 sax 两种思想
- DOM4J:一款非常优秀的解析器
- Jsoup:jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。
- PULL:Android 操作系统内置的解析器,sax 方式的。
Jsoup 快速入门
-
步骤:
- 导入 jar 包
- 获取 Document 对象
- 获取对应的标签 Element 对象
- 获取数据
- 代码
//2.1 获取 student.xml 的 path
String path = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();
//2.2 解析 xml 文档,加载文档进内存,获取 dom 树 --->Document
Document document = Jsoup.parse(new File(path), "utf-8");
//3. 获取元素对象 Element
Elements elements = document.getElementsByTag("name");
System.out.println(elements.size());
//3.1 获取第一个 name 的 Element 对象
Element element = elements.get(0);
//3.2 获取数据
String name = element.text();
System.out.println(name);
对象的使用
1. Jsoup:工具类,可以解析 html 或 xml 文档,返回 Document
* parse:解析 html 或 xml 文档,返回 Document
* parse(File in, String charsetName):解析 xml 或 html 文件的。* parse(String html):解析 xml 或 html 字符串
* parse(URL url, int timeoutMillis):通过网络路径获取指定的 html 或 xml 的文档对象
-
Document:文档对象。代表内存中的 dom 树
-
获取 Element 对象
- getElementById(String id):根据 id 属性值获取唯一的 element 对象
- getElementsByTag(String tagName):根据标签名称获取元素对象集合
- getElementsByAttribute(String key):根据属性名称获取元素对象集合
- getElementsByAttributeValue(String key, String value):根据对应的属性名和属性值获取元素对象集合
-
- Elements:元素 Element 对象的集合。可以当做 ArrayList<Element> 来使用
-
Element:元素对象
-
获取子元素对象
- getElementById(String id):根据 id 属性值获取唯一的 element 对象
- getElementsByTag(String tagName):根据标签名称获取元素对象集合
- getElementsByAttribute(String key):根据属性名称获取元素对象集合
- getElementsByAttributeValue(String key, String value):根据对应的属性名和属性值获取元素对象集合
-
获取属性值
- String attr(String key):根据属性名称获取属性值
-
获取属性值
- String attr(String key):根据属性名称获取属性值
-
获取文本内容
- String text(): 获取文本内容
- String html(): 获取标签体的所有内容 ( 包括字标签的字符串内容)
-
5、Node:节点对象
- 是 Document 和 Element 的父类
快捷查询方式
-
selector: 选择器
-
使用的方法:Elements select(String cssQuery)
- 语法:参考 Selector 类中定义的语法
-
-
XPath:XPath 即为 XML 路径语言,它是一种用来确定 XML(标准通用标记语言的子集)文档中某部分位置的语言
- 使用 Jsoup 的 Xpath 需要额外导入 jar 包。
-
代码:
//1. 获取 student.xml 的 path String path = JsoupDemo6.class.getClassLoader().getResource("student.xml").getPath(); //2. 获取 Document 对象 Document document = Jsoup.parse(new File(path), "utf-8"); //3. 根据 document 对象,创建 JXDocument 对象 JXDocument jxDocument = new JXDocument(document); //4. 结合 xpath 语法查询 //4.1 查询所有 student 标签 List<JXNode> jxNodes = jxDocument.selN("//student"); for (JXNode jxNode : jxNodes) {System.out.println(jxNode); } System.out.println("--------------------"); //4.2 查询所有 student 标签下的 name 标签 List<JXNode> jxNodes2 = jxDocument.selN("//student/name"); for (JXNode jxNode : jxNodes2) {System.out.println(jxNode); } System.out.println("--------------------"); //4.3 查询 student 标签下带有 id 属性的 name 标签 List<JXNode> jxNodes3 = jxDocument.selN("//student/name[@id]"); for (JXNode jxNode : jxNodes3) {System.out.println(jxNode); } System.out.println("--------------------"); //4.4 查询 student 标签下带有 id 属性的 name 标签 并且 id 属性值为 itcast List<JXNode> jxNodes4 = jxDocument.selN("//student/name[@id='itcast']"); for (JXNode jxNode : jxNodes4) {System.out.println(jxNode); }
感谢
黑马程序员
万能的网络
以及勤劳的自己
正文完