#今日内容
1。 XML
1.概念
2. 语法
3. 解析
## XML:
1。概念:可扩展标记语言可扩展标记语言
*可扩展:标签都是自定义的。<user> <student>
*功能
*存储数据
1. 配置文件
2. 在网络中传输
* xml与html的区别
1。 XML标签都是自定义的,HTML标签是预定义
.2.xml的语法严格,HTML语法松散
3。 XML是存储数据的,HTML是展示数据
* w3c:万维网联盟
2.语法:
*基本语法:
1.xml文档的后缀名.xml
2. xml第一行必须定义为文档声明
3。 XML文档中有且仅有一个根标签
4. 属性值必须使用引号(单双都可)引起来
5. 标签必须正确关闭
6。 xml标签名称区分大小写
*快速入门:
<?xml version ='1.0'?>
<users>
<user id ='1'>
<name> zhangsan </姓名>
<年龄> 23 </ age>
<性别>男性</性别>
<br/>
</ user>
<user id ='2'>
<name> lisi </ name>
<age> 24 </ age>
<gender> female </ gender>
</ user>
< /用户>
*版本:版本号,必须的属性
*编码:编码方式。告知解析引擎当前文档使用的字符集,默认值:ISO-8859-1
* standalone:是否独立
*取值:
* yes:不依赖其他文件
*无:依赖其他文件
2. 指令(了解):结合css的
* <?xml-stylesheet type =“text / css”href =“a.css”?>
3.标签:标签名称自定义的
*规则:
*名称可以包含字母,数字以及其他的字符
*名称不能以数字或者标点符号开始
*名称不能以字母XML(或者XML,XML
等等)开始*名称不能包含空格
4.属性:
id属性值唯一
5. 文本:
* CDATA区:在该区域中的数据会被原样展示
*格式:<![CDATA [数据]]>
*约束:规定xml文档的书写规则
*作为框架的使用者(程序员):
1。能够在xml中引入约束文档
2. 能够简单的读懂约束文档
*分类:1.DTD
:一种简单的约束技术
2. 模式:一种复杂的约束技术
* DTD:
*引入dtd文档到xml文档中
*内部dtd:将约束规则定义在xml文档中
*外部dtd:将约束的规则定义在外部的dtd文件中
*本地:<!DOCTYPE根标签名SYSTEM“dtd文件的位置“>
*网络:<!DOCTYPE根标签名PUBLIC”dtd文件名字“”dtd文件的位置URL“>
*架构:
*引入:
1。填写xml文档的根元素
2.引入xsi前缀.xmlns :xsi =“ http://www.w3.org/2001/XMLSchema-instance ” 3.引入xsd文件命名空间.xsi :schemaLocation =“ http://www.itcast.cn/xml student.xsd” 4.为每一个xsd约束声明一个前缀,作为标识xmlns =“ http://www.itcast.cn/xml ”
<学生xmlns:xsi =“ http://www.w3.org/2001/XMLSchema-instance ” xmlns =“ http://www.itcast.cn/xml ” xsi:schemaLocation =“ http://www.itcast .cn / xml student.xsd“>
3.解析:操作XML文档,将文档中的数据读取到内存中
*操作XML文档
1. 解析(读取):将文档中的数据读取到内存中
2. 写入:将内存中的数据保存到XML文档中持久化的存储
*解析xml的方式:
1.DOM:将标记语言文档一次性加载进内存,在内存中形成一颗dom树
*优点:操作方便,可以对文档进行CRUD的所有操作
*缺点:占内存
2。 SAX:逐行读取,基于事件驱动的。
*优点:不占内存。
*缺点:只能读取,不能增赌改
* xml常见的解析器:1.JAXP:
sun公司提供的解析器,支持dom和sax两种思想
2。 DOM4J:一款非常优秀的解析器
3。 Jsoup:jsoup是一款Java的HTML的解析器,可直接解析某个URL地址,HTML文本内容它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的的的操作方法来取出和操作数据
.4PULL:安卓操作系统内置的解析器,萨克斯方式的。
* Jsoup:jsoup是一款Java的HTML解析器,可直接解析某个URL地址,HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
*快速入门:
*步骤:
1。导入罐包
2. 获取文档对象
3. 获取对应的标签元对象
4. 获取数据
*代码:
//2.1获取student.xml的路径
String path = JsoupDemo1.class.getClassLoader()。getResource(“student.xml”)。getPath();
//2.2解析xml文档,加载文档进内存,获取dom树--->文档
文档文档= Jsoup.parse(新文件(路径),“utf-8”);
// 3.获取元素对象
元素元素= document.getElementsByTag(“name”);
的System.out.println(elements.size());
//3.1获取第一个名称的元素对象
元素= elements.get(0);
//3.2获取数据
String name = element.text();
的System.out.println(名);
*对象的使用:
1.Jsoup:工具类,可以解析html或xml文档,返回文件
*解析:解析html或xml文档,返回文件
*解析(文件输入,String charsetName):解析xml或html文件的。
* parse(String html):解析xml或html字符串
* parse(URL url,int timeoutMillis):通过网络路径获取指定的html或xml的文档对象
static boolean
|
isValid(String bodyHtml, Whitelist whitelist)
|
测试输入正文HTML是否仅包含白名单允许的标记和属性。
|
---|---|---|
static Document
|
parse(File in, String charsetName)
|
将文件的内容解析为HTML。
|
static Document
|
parse(File in, String charsetName, String baseUri)
|
将文件的内容解析为HTML。
|
static Document
|
parse(InputStream in, String charsetName,String baseUri)
|
读取输入流,并将其解析为文档。
|
static Document
|
parse(InputStream in, String charsetName,String baseUri, Parser parser)
|
读取输入流,并将其解析为文档。
|
static Document
|
parse(String html)
|
将HTML解析为文档。
|
static Document
|
parse(String html, String baseUri)
|
将HTML解析为文档。
|
static Document
|
parse(String html, String baseUri, Parser parser)
|
使用提供的解析器将HTML解析为文档。
|
static Document
|
parse(URL url, int timeoutMillis)
|
获取URL,并将其解析为HTML。
|
2. 文档:文档对象。代表内存中的dom树
*获取元素对象
* getElementById(String id):根据id属性值获取唯一的元素对象
* getElementsByTag(String tagName):根据标签名称获取元素对象集合
* getElementsByAttribute( String key):根据属性名称获取元素对象集合
* getElementsByAttributeValue(String key,String value):根据对应的属性名和属性值获取元素对象集合
3. 元素:元素元素对象的集合。可以当做ArrayList <Element>来使用
4. 元素:元素对象
1. 获取子元素对象
* getElementById(String id):根据id属性值获取唯一的元素对象
* getElementsByTag(String tagName):根据标签名称获取元素对象集合
* getElementsByAttribute(String key):根据属性名称获取元素对象集合
* getElementsByAttributeValue(String key,String value):根据对应的属性名和属性值获取元素对象集合
2.获取属性值
* String attr(String key):根据属性名称获取属性值
Element
|
attr(String attributeKey, boolean attributeValue)
|
在此元素上设置布尔属性值。
|
---|---|---|
Element
|
attr(String attributeKey,String attributeValue)
|
在此元素上设置属性值。
|
元素attr(字符串attributeKey,布尔attributeValue)
此元素上设置一个布尔属性值.attributeKey
元素attr(字符串,字符串attributeValue)
在这个元素设置一个属性值。
3. 获取文本内容
* String text():获取文本内容
* String html():获取标签体的所有内容(包括字标签的字节串内容)
5.节点:节点对象
*是文档和元素的父类
*快捷查询方式:
1。选择器:选择器
*使用的方法:元素选择(String cssQuery)
*语法:参考选择器类中定义的语法
|
||
E F
|
来自è元素的˚F元素 |
div a , .logo h1
|
|
Ë的直接孩子 |
|
|
|
图案 | 火柴 | 例 |
---|---|---|
*
|
任何元素 |
*
|
tag
|
具有给定标记名称的元素 |
div
|
*|E
|
任何名称空间NS中的 Ë类型元素 |
*|name 找到元素 <fb:name>
|
ns|E
|
名称空间NS中的 Ë类型元素 |
fb|name 找到元素 <fb:name>
|
#id
|
属性ID为“ID”的元素 |
div#wrap , #logo
|
.class
|
类名为“下课”的元素 |
div.left , .result
|
[attr]
|
具有名为“ATTR”的属性的元素(具有任何值) |
a[href] , [title]
|
[^attrPrefix]
|
属性名称以“attrPrefix”开头的元素。用于查找包含HTML5数据集的元素 |
[^data-] , div[^data-]
|
[attr=val]
|
具有名为“ATTR”的属性的元素,以及等于“VAL”的值 |
img[width=500] , a[rel=nofollow]
|
[attr="val"]
|
具有名为“ATTR”的属性的元素,以及等于“VAL”的值 |
span[hello="Cleveland"][goodbye="Columbus"] , a[rel="nofollow"]
|
[attr^=valPrefix]
|
具有名为“ATTR”的属性的元素,以及以“valPrefix”开头的值 |
a[href^=http:]
|
[attr$=valSuffix]
|
具有名为“ATTR”的属性的元素,以及以“valSuffix”结尾的值 |
img[src$=.png]
|
[attr*=valContaining]
|
具有名为“ATTR”的属性的元素,以及包含“valContaining”的值 |
a[href*=/search/]
|
[attr~=regex]
|
具有名为“ATTR”的属性的元素,以及与正则表达式匹配的值 |
img[src~=(?i).(png|jpe?g)]
|
以上可以以任何顺序组合 |
div.header[title]
|
2. XPath:XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言
* 使用Jsoup的Xpath需要额外导入jar包。
* 查询w3cshool参考手册,使用xpath的语法完成查询
* 代码:
//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对象
//等价于:把document对象转换成JXDocument对象,
//用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);
}
String path = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();
Document document = Jsoup.parse(new File(path), "utf-8");
JXDocument jxDocument = new JXDocument(document);
List<JXNode> jxNodes = jxDocument.selN("//student//text()");
//返回值是一个集合1个或者多个结果
System.out.println(jxNodes);
//返回值: [张三 25 male 李四 24 female]
List<JXNode> jxNodes1 = jxDocument.selN("//student/name/text()");
//返回值: 张三 李四
JXNode selNOne = jxDocument.selNOne("//student/name/text()");
//返回值是一个结果 张三
System.out.println(selNOne);
//等价于:
JXNode selNOne1 = jxDocument.selNOne("//student/name");
Element element = selNOne1.getElement();
System.out.println(element);
//返回值: 张三
//
// System.out.println(element);
//返回值: 张三
//jxNodes.
// System.out.println("-----------------------------");
// Element element = jxNode.getElement();
//
// System.out.println(element);
取节点
XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。 下面列出了最有用的路径表达式:
表达式 | 描述 |
---|---|
nodename | 选取此节点的所有子节点。 |
/ | 从根节点选取。 |
// | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 |
. | 选取当前节点。 |
.. | 选取当前节点的父节点。 |
@ | 选取属性。 |
在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:
路径表达式 | 结果 |
---|---|
bookstore | 选取 bookstore 元素的所有子节点。 |
/bookstore |
选取根元素 bookstore。 注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径! |
bookstore/book | 选取属于 bookstore 的子元素的所有 book 元素。 |
//book | 选取所有 book 子元素,而不管它们在文档中的位置。 |
bookstore//book | 选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。 |
//@lang | 选取名为 lang 的所有属性。 |
谓语(Predicates)
谓语用来查找某个特定的节点或者包含某个指定的值的节点。
谓语被嵌在方括号中。
在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:
路径表达式 | 结果 |
---|---|
/bookstore/book[1] | 选取属于 bookstore 子元素的第一个 book 元素。 |
/bookstore/book[last()] | 选取属于 bookstore 子元素的最后一个 book 元素。 |
/bookstore/book[last()-1] | 选取属于 bookstore 子元素的倒数第二个 book 元素。 |
/bookstore/book[position()<3] | 选取最前面的两个属于 bookstore 元素的子元素的 book 元素。 |
//title[@lang] | 选取所有拥有名为 lang 的属性的 title 元素。 |
//title[@lang='eng'] | 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。 |
/bookstore/book[price>35.00] | 选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。 |
/bookstore/book[price>35.00]/title | 选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。 |
选取未知节点
XPath 通配符可用来选取未知的 XML 元素。
通配符 | 描述 |
---|---|
* | 匹配任何元素节点。 |
@* | 匹配任何属性节点。 |
node() | 匹配任何类型的节点。 |
在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:
路径表达式 | 结果 |
---|---|
/bookstore/* | 选取 bookstore 元素的所有子元素。 |
//* | 选取文档中的所有元素。 |
//title[@*] | 选取所有带有属性的 title 元素。 |
选取若干路径
通过在路径表达式中使用"|"运算符,您可以选取若干个路径。
在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:
路径表达式 | 结果 |
---|---|
//book/title | //book/price | 选取 book 元素的所有 title 和 price 元素。 |
//title | //price | 选取文档中的所有 title 和 price 元素。 |
/bookstore/book/title | //price | 选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素。 |
版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!
常见资源合集和破解 fmvvvteih...