写在前面:
学习网站:https://www.w3school.com.cn
String pathxml=JsoupTest.class.getClassLoader().getResource("users.xml").getPath();
Document document = Jsoup.parse(new File(pathxml), "utf-8");
JXDocument jxDocument = new JXDocument(document);
//获取元素list
List<JXNode> jxNodes = jxDocument.selN("//user");
//获取元素对象
Element element=jxNodes.get(0).getElement()
Document doc=Jsoup.parse(File,字符集) | |
JXDocument jxd=new JXDocument (doc) | |
List<JXNode> nodes=jxd.selN("xxxxxx") | //user //user/name //user[@id] //user[@id='1'] |
Element ele=nodes.get(0).getElement() | ele.text() 纯文本 ele.html() 所有内容 ele.attr(属性名) 获取属性值 |
第一行:<?xml version='1.0' ?> |
标签区分大小写 有且只有一个根标签 |
不需要转义的文本区:<![CDATA[ ]]> 需要转义的文本区:<code> |
1. XML
xml:标记语言,可悲浏览器解析,可扩展(标签都是自定义的)
功能:存储数据(配置文件/在网络中传输)
简单语法:
文件后缀 .xml
第一行必须是文档说明:<?xml 属性列表 ?> (version='1.0' encoding编码方式默认ISO-8859-1 standalone是否独立)
跟标签:有且只有一个
属性必须引起来(单双都可以)
标签必须正确闭合(可以自闭合)
标签区分大小写
id属性值唯一
引用css文件:<?xml-stylesheet type='text/html' href='url' ?>
文本--两种写法:
<code> </code>
<![CDATA[ 内容被原样展示,特殊字符不需要再转义 ]]>
<?xml version="1.0" encoding="utf-8" ?>
<users>
<user id="1"> <!--这里的id属性,不代表唯一值id-->
<id>1</id>
<name>zhang san</name>
</user>
<user id="2">
<id>2</id>
<name>li si</name>
</user>
<user id="3">
<id>3</id>
<name>
<code>
a < b
</code>
<![CDATA[
a < b
]]>
</name>
</user>
</users>
2. 约束
约束(说明文档):规定xml的书写规则
DTD
Schema
3. xml解析(读取)
方式:
DOM:将文件加载进内存,形成一个dom树;操作方便,但是大文档消耗内存
SAX:逐行读取;内存中只有一行,只能读取,不能增删改
常见解析器:
JAXP、DOM4J、Jsoup、PULL(安卓内置)
4. Jsoup (工具类)(开源)(DOM方式)
使用步骤:
导jar包:jsoup-1.11.2.jar
获取Document对象:Jsoup.parse
//Jsoup.parse(File, 字符集);
//Jsoup.parse(string);//xml文件内容
//Jsoup.parse(url, 超时时间);
Document document = Jsoup.parse(new File(path), "utf-8");
获取Element对象:document.getElementsByTag(标签名);
//document.getElementById(id的属性值);
//document.getElementsByTag(标签名);
//document.getElementsByAttribute(属性名);
//document.getElementsByAttributeValue(属性名, 属性值);
Elements elements = document.getElementsByTag("name");
//elements 是一个ArrayList元素列表
for (int i = 0; i < elements.size(); i++) {
System.out.println(elements.get(i));
}
//document.select(string)
//string取值:标签名,标签名[属性名='属性值'],#属性id的值
// A B A下的所有(子孙)B,A>B A下的直接B
Elements select = document.select("user[id='2']");
获取数据:elements.text();
//elements.attr(属性名);//获取属性值(属性名不区分大小写)
//elements.text();//纯文本
//elements.html();//所有内容,包括字标签
String name = elements.text();
Xpath查询方式:
导jar包:JsoupXpath-0.3.2.jar
创建JXDocument对象:new JXDocument(document);
查询:jxDocument.selN (xxx)
//selN("//user") 所有user标签
//selN("//user/name") user下的name
//selN("//user[@id]") 带有id属性的user标签
//selN("//user[@id='1']") id属性等于1的user标签
List<JXNode> jxNodes = jxDocument.selN("//user[@id='1']");