文章目录
JavaWeb
XML(extensible markup language):
一、简介
1、什么是XML?
XML指可扩展标记语言
XML的设计宗旨是传输数据
XML需要自定义标签
####2、XML和HTML之间的区别
XML被设计用来传输和存储数据
HTML被设计用来显示数据
3、XML用途
XML把数据从HTML分离
如果您需要在 HTML 文档中显示动态数据,那么每当数据改变时将花费大量的时间来编辑 HTML。
通过 XML,数据能够存储在独立的 XML 文件中。这样您就可以专注于使用 HTML/CSS 进行显示和布局,并确保修改底层数据不再需要对 HTML 进行任何的改变。
通过使用几行 JavaScript 代码,您就可以读取一个外部 XML 文件,并更新您的网页的数据内容。
XML简化数据共享
在真实的世界中,计算机系统和数据使用不兼容的格式来存储数据。
XML 数据以纯文本格式进行存储,因此提供了一种独立于软件和硬件的数据存储方法。
这让创建不同应用程序可以共享的数据变得更加容易。
XML简化平台变更
升级到新的系统(硬件或软件平台),总是非常费时的。必须转换大量的数据,不兼容的数据经常会丢失。
XML 数据以文本格式存储。这使得 XML 在不损失数据的情况下,更容易扩展或升级到新的操作系统、新的应用程序或新的浏览器。
XML使您的数据更有用
不同的应用程序都能够访问您的数据,不仅仅在 HTML 页中,也可以从 XML 数据源中进行访问。
通过 XML,您的数据可供各种阅读设备使用(掌上计算机、语音设备、新闻阅读器等),还可以供盲人或其他残障人士使用。
二、XML树结构
XML将数据组织成为一棵树,DOM 通过解析 XML 文档,为 XML 文档在逻辑上建立一个树模型,树的节点是一个个的对象。这样通过操作这棵树和这些对象就可以完成对 XML 文档的操作,为处理文档的所有方面提供了一个完美的概念性框架。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f8W6vu9j-1629566838561)(QQ截图20210820154208.png)]
三、XML语法规则
1、XML根元素
xml必须包含根元素,它是所有其他元素的父元素,比如以下示例中root就是根元素
<root>
<child>
</child>
</root>
以下示例中note是根元素
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>
<Form></Form>
</to>
</note>
2、XML声明
XML为文件的可选部分,如果存在需要放在文档的第一行,如下
<?xml version="1.0" encoding="utf-8"?>
注:utf-8为默认编码
####3、所有的XML元素都必须有一个关闭标签
html的有的元素比如
等元素可以是单标签,
ml元素必须有一个关闭标签,比如
4、XML区分大小写
5、XML必须正确嵌套
<B><I>正确嵌套部分<I><B>
6、XML属性值必须加引号
<note date="2020-1-1">
</note>
date的值必须加引号
7、实体引用(转义字符)
在xml中,有5个预定义的实体引用:
< <
> >
& &
' ' 引号
" " 双引号
8、XML注释
<!-- 注释内容 -->
9、保留空格
html:会将多个连续的空格合并为一个
xml:会保留所有的空格
10、XML以LF存储换行
四、XML元素
1、什么是xml元素
XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分
一个元素可以包含:
其他元素
文本
属性
混合以上所有
<bookstore>
<book category="CHILDREN">
<title>Harry Potter</title>
<auther>K.Rowling</auther>
<year>29.99</year>
</book>
</bookstore>
其中:
标签包含其他元素
标签包含属性
< title >标签包含文本
2、XML命名规则
名称不能以数字或者标点符号开始
名称不能以字母xml、Xml、XML等等开始
没有保留字,可以使用任何名称
3、XML元素是可扩展的
假设我们创建了一个应用程序,去操作一个XML文档,在应用程序不中断不修改的前提下,我们可以修改XML文档,该应用程序仍然能读取我们修改后的XML文档。
五、XML属性
1、XML元素具有属性,提供有关元素的额外信息
2、XML属性必须加引号
单引号’ 和双引号" 均可使用
如果属性值本身带有双引号,那么可以使用单引号
3、属性和元素
建议多使用元素,少使用属性
属性不能包含多个值(一个属性对应一个值),元素可以
属性不能包含树结构,元素可以
属性不容易扩展,元素可以
六、XML验证
1、通过DTD验证XML是否合法(详见DTD笔记)
2、验证器
XML文档中的错误会终止XML应用程序的运行
七、为XML添加样式
XML文档被打开时默认展示为源代码,若要添加样式,可以使用以下两种方式
1、XML CSS(次选)
引入css文件
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/css" href="cd_catalog.css"?>
2、XML XSLT(首选)
XSLT 是在浏览器显示 XML 文件之前,先把它转换为 HTML
XSLT由浏览器完成,为了避免不同浏览器产生不同的结构,可选择由服务器完成转换
八、HttpRequest对象(详见xml Dom笔记)
1、用途:用于在后台与服务器交换数据
2、好处
1、在不重新加载页面的情况下更新网页
2、在页面已加载后从服务器请求数据
3、在页面已加载后从服务器接受数据
4、在后台向服务器发送数据
3、创建一个XMLHttpRequest对象
xmlhttp = new XMLHttoReques();
如果是旧版本浏览器(IE5 IE6)(可以不看)
xmlhttp = new ActiveXobject("Microsoft.XMLHTTP");
九、XML解析器(dom4j最常用)
XML 解析器把 XML 文档转换为 XML DOM 对象 - 可通过 JavaScript 操作的对象
解析:将文档中的数据读入内存中
写入:将内存中的数据写入XML文档中,持久化存储
1、解析xml的方式:
(1)DOM(思想):将标记语言文档一次性加载进内存,在内存中形成一棵DOM树
优点:操作方便,可以对文档进行CRUD操作
缺点:占内存
(2)SAX(思想):逐行读取,基于事件驱动。
优点:不占内存。
缺点:只能读,不能CRUD
2、常见的解析器:
(1)JAXP:sun公司提供的解析器,支持DOM和SAX。
(2)DOM4j:一款非常优秀的解析器,基于DOM思想解析
(3)Jsoup:jsoup是一款java的解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操作方法来去除和操作数据。
(4)PULL:Android操作系统的内置解析器,sax思想实现。
3、Jsoup解析器:
1、使用步骤:
(1)导入jar包
工程下新建libs文件夹,将jar包复制进libs文件夹中,然后build paths
(2)获取Document对象
//获取xml文档的路径
String path = 类名.class.getClassLoader().getResource("xml文件名").getPath();
//解析xml文档,加载文档进内存,获取DOM树-->Document
Document doc = Jsoup.parse(new File(path),"utf-8");
//获取元素对象
Elements elements = doc.getElementsByTag("标签名");
//获取数据
String name = elements.text(); //获取文本数据
2、对象的使用:
**Jsoup:工具类:**可以解析html文档或xml文档,返回Document
- parse:解析html或xml文档。返回Document
- parse(File in,String charsetName):解析文件。
- parse(String string):解析字符串(内容为xml所有文件内容),返回Document
- parse(URL url,int timeoutMillis):通过网络路径获取指定的xml文档对象
**Document:**文档对象。代表内存中的dom树
- 主要用于获取Elements。
- getElementsByTag():根据标签名获取xml元素的集合
- getElementsByAttribute(String key):根据属性名称获取元素对象集合
- getElementsByAttributeValue(String key,String Value):根据对应的属性名和属性值获取元素对象集合
- getElementById():根据Id属性值获取唯一的Element对象
**Elements:**元素Element对象的集合。可以当做ArrayList来使用
**Element:**元素对象。获取数据
1、获取子元素对象
-
getElementsByTag():根据标签名获取xml元素的集合
-
getElementsByAttribute(String key):根据属性名称获取元素对象集合
-
getElementsByAttributeValue(String key,String Value):根据对应的属性名和属性值获取元素对象集合
-
getElementById():根据Id属性值获取唯一的Element对象
2、获取属性值
- attr(String key):根据属性名称获取属性值
3、获取文本内容
- String text():获取文本内容
- String html():获取标签体的所有内容,包括子标签
**Node:**节点对象
3、快捷查询XMl
1、selector选择器:
- 使用的方法:Elements select(String cssQuery)
- 语法:参考Select类中定义的语法
2、XPath:
-
导入jar包
-
创建对象
-
JXDocument jxDocument = new JXDoucument(document); //document为JSoup获取的文档树
-
结合xpath语法查询(返回jxNode),jxNode即Document的结点
-
jxDocument.selN("Xpath语法"); //语法可查文档
-
十、XML命名空间(namespace)
1、使用前缀来避免命名冲突
<t:table>
<t:title></t:title>
</t:table>
<f:table>
<f:title></f:title>
</f:table>
2、xmlns属性
当在XML中使用前缀时,用于前缀的一个命名空间必须被定义
命名空间是在元素的开始标签的xmlns属性中定义的
语法格式:xmlns:前缀=“URL”
可以定义在元素中(类似局部变量)
<h:table xmlns:h="http://www.w3.org/TR/html4/">
<h:title></h:title>
<h:name></h:name>
</h:table>
可以定义在根标签头部(类似全局变量),命名空间将应用于根标签下所有元素
<root xmlns:h="http://www.w3.org/TR/html4/"
xmlns:f="http://www.w3school.cc/furniture">
<f:table>
<f:title></f:title>
<f:name></f:name>
</f:table>
</root>
十一、XML CDATA区
XML文档中的所欲文本均会被解析器解析,只有CDATA区段中的文本会被解析器忽略
1、PCDATA:被解析的字符数据
当某个XML元素被解析时,其标签之间的文本也会被解析
2、CDATA:未解析字符数据
指的是不需让解析器来解析的文本数据
比如:"<" "&"等字符在XML中是非法的,应该放在CDATA区
3、格式
<![CDATA[ ]]>school.cc/furniture">
<f:table>
<f:title></f:title>
<f:name></f:name>
</f:table>
十一、XML CDATA区
XML文档中的所欲文本均会被解析器解析,只有CDATA区段中的文本会被解析器忽略
1、PCDATA:被解析的字符数据
当某个XML元素被解析时,其标签之间的文本也会被解析
2、CDATA:未解析字符数据
指的是不需让解析器来解析的文本数据
比如:"<" "&"等字符在XML中是非法的,应该放在CDATA区