XML(基础)

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个预定义的实体引用:

&lt; 	<
&gt;	>
&amp;	&
&apos;	'	引号
&quot;	"	双引号
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区

3、格式
<![CDATA[ ]]>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值