写在前面:
学习网站: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第一行:<?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']");