全国咨询/投诉热线:400-618-4000

Extensible Markup Language 可扩展标记语言

创建时间:2019年01月10日13时56分 浏览次数:

概念:Extensible Markup Language 可扩展标记语言
xml是可扩展的,通过自定义标签。
用于存储数据,主要是存储配置,在网络中传输。
xml的标签都是自定义的,html的标签都是预定义的。语法严格。

后缀名是xml
内容第一行必须是文档声明:例:<?xml version='1.0' ?>
一个xml文件有且仅有一个根标签。
属性值必须用引号包裹。
标签必须关闭
标签名称区分大小写

组成部分:
1.文档声明:
格式:<?xml 属性列表 ?>
属性:
version:版本号,必须的属性
encoding:编码方式。告知解析引擎当前文档使用的字符集,默认值: ISO
standalone:是否独立。yes独立,no不独立
2.指令:结合css
<?xml-stylesheet type="text/css" href="a.css" ?>
3.标签:规则:
可以包含字母、数字以及其他字符
不能以数字或标点符号开头
不能以xml开头
不能包含空格
4.属性:
id属性值唯一
5.文本:
CDATA:在该区域中的数据会被原样显示 格式:<![CDATA[数据]]>
约束:规定xml文档的书写规则
作为框架的使用者(程序员):
1.能够在xml中引入约束
2.能够读懂约束

分类:DTD:简单的约束技术
schema:复杂的约束技术

解析:读取xml文档
方式:
DOM:一次性把文档读取到内存中,形成一颗dom树
操作方便,可以对文档进行增删改查操作,占内存
SAX:逐行读取,基于事件驱动
不占内存,只能读,不能增删改

常见解析器:
JAXP:SUN公司提供的解析器,支持dom和sax
DOM4J:优秀
Jsoup:Java的HTML解析器,可以直接解析某个url地址的html内容,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据
PULL:Android的内置解析器,sax方式

Jsoup使用步骤:
1.导入jar包
2.获取Document对象
3.获取对应的标签Element对象
4.获取数据

代码例:
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
//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工具类:parse方法
* parse​(File in, String charsetName):解析xml或html文件的。
* parse​(String html):解析xml或html字符串
* parse​(URL url, int timeoutMillis):通过网络路径获取指定的html或xml的文档对象

2.Document、Element,获取element对象
*getElementById(String id)
getElementsByTag(String tagName)
getElementsByAttribute(String key)
getElementsByAttributeValue(String key, String value)
3.Element对象
String attr(String key)根据属性名获取属性值
String text()获取文本内容
String html()获取标签体的所有内容,包括标签
* 快捷查询方式:
                1. selector:选择器
                        * 使用的方法:Elements        select​(String cssQuery)
                                * 语法:参考Selector类中定义的语法
                2. XPath:XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言
                        * 使用Jsoup的Xpath需要额外导入jar包。
                        * 查询w3cshool参考手册,使用xpath的语法完成查询
                        * 代码:

[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//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);
                        }



作者:传智播客JavaEE培训学院

首发:http://java.itcast.cn