XML
学习自:
1、XML简介
1)什么是XML
XML指可扩展标记语言(eXtensible Markup Language)
XML是标记语言,类似HTML
XML设计宗旨传输(而非显示)数据
XML标签没有被预定义。你需要自行定义标签。
XML被设计为具有自我描述性
2)与HTML的差异
①不是HTML的替代
②设计目的不同——XML传输数据,HTML显示数据
③XML的焦点是数据内容,HTML的内容是数据的外观
3)XML代码不会执行任何行为,仅用来传输信息
比如,一个XML文档:
<note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
并不会做任何事情,它仅仅是包装在XML标签中的纯粹信息。我们需要编写相关程序,才能传送、接收和显示出这个文档
4)XML标签并没有被预定义
也就是说,我们可以随意发明标签,比如上文中的<to>和<from>。
在HTML中使用的标签及HTML的结构是预定义的。HTML文档只能使用在HTML标准中定义过的标签。
5)XML不是HTML的替代
XML是对HTML的补充。在大多数web应用程序中,XML用于传输数据,而HTML用于格式化并显示数据。
2、XML的用途
1)XML把数据从HTML分离
如果你需要在HTML文档中显示动态数据,那么每当数据改变时都需要花费大量的时间来编辑HTML。
通过XML,数据可以存储在独立的XML文件中。这样你就可以专注于使用HTML进行布局和显示,并确保修改底层数据不再需要对HTML进行任何的改变。
通过几行JavaScript,你就可以读取一个外部XML文件,然后更新HTML中的数据内容。
2)XML简化数据共享
XML数据以纯文本格式进行存储,因此提供了一种独立于软件和硬件的数据存储方法。
这让创建不同应用程序可以共享的数据变得更加容易。
3)简化数据传输
通过XML,可以在不兼容的系统间轻松交换数据,降低了数据交换代码的复杂性,提高了可用性以及易用性。
4)简化平台变更
系统升级时,由于数据以文本的形式保存到了XML文件中,所以系统不必大量转换数据,更容易扩展和升级。
3、XML树结构
1)一个XML文档实例
<?xml version="1.0" encoding="ISO-8859-1"?> <note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
第一行是XML声明。它定义了XML版本(1.0)和所使用的编码(ISO-8859-1)
第二行描述文档的根元素
接下来4行描述根的4个子元素
最后一行定义根元素的结尾
总的看来,虽然标签名我们可以随便定义,但是仍有两个规则需要遵循:1)有根元素;子元素被放置在根元素的开始和结束标签之前;2)元素具有开始和结尾,以<xxx>开头,以</xxx>结尾
2)XML文档的树形结构
XML文档必须包含根元素。该元素是其他所有元素的父元素。
XML文档中的元素形成了一棵文档树,这棵树从根部开始,并且扩展到树的最底端。
所有元素均可以拥有子元素:
<root> <child> <subchild>......</subchild> </child> </root>
所有元素均可以拥有文本内容和属性
4、XML语法规则
1)所有元素都必须有关闭标签
即每个<xxx>在其后边都有</xxx>与之对应
HTML允许存在没有关闭标签的元素:
<p>This is a paragraph <p>This is another paragraph
2)XML标签对大小写敏感
在XML中,标签<Letter>与<letter>是不同的。
必须使用相同大小写来编写开始标签和结束标签。
3)必须有根元素
4)属性值需要加引号
<note date=08/08/2008> 错误! <note date="08/08/2008"> 正确!
5)引用
在XML中,一些符号拥有特殊含义,不能直接写在XML元素中作为普通项(类似于其他语言中的转义字符)。
比如<,如果将其作为XML元素中的一项,将会发生错误,因为XML解析器将会把它作为新元素的开始,从而产生XML错误;如果要进行小于判断时,通过实体引用来实现:
<message> if salary < 1000 then </message> 错误 <message> if salary < 1000 then </message> 正确
在XML中,有5个预定义的实体引用:
< | < | |
> | > | |
& | & | 和,and |
' | ' | |
" | " |
补充:在XML中,只有<与&是实际上非法的。其他三个都是合法的吗,但是用实体引用是个好习惯。
6)注释
<!-- Comment -->
7)空格保留
在HTML中,会把多个连续的空格字符合并为一个;
而在XML中,文档中的空格会被一一保留下来。
8)换行
在Windows应用程序中,换行通常以一对字符来存储:回车符(CR)与换行符(LF)
5、XML元素
命名规则
别的不多说,只有一项需要注意:不能以"xml"及其大小写形式开始
6、XML属性
1)属性及何时使用属性
XML属性必须加引号,单引号双引号均可以。
至于何时使用子元素,何时使用属性,一个经验是在XML中,应尽量避免使用属性,而是将属性写为具有层次的子元素:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <!--属性--> < note date='08/08/2008'> <!--子元素--> < note > < date >08/08/2008</ date > </ note > <!--扩展的子元素--> < note > < date > < day >08</ day > < monty >08</ month > < year >2008</ year > </ date > </note |
2)针对元数据的XML属性
元数据:有关数据的数据;比如ID,跟数据内容无关,仅起标识作用。
有时会向元素分配ID引用。这些ID索引可以用于标识XML元素,它起作用的方式与HTML中ID属性是一致的:
<messages> <note id="501"> ... </note> <note id="502"> ... </note> </messages>
上边的ID仅仅是一个标识符,用于标识不同的标签。它并不是数据的组成部分。
因此:元数据应当存储为属性,数据本身应当存储为元素。
7、XML验证
在第二行加<!DOCTYPE>进行DTD声明,以便进行后续验证。
8、其他
1)在所有现代浏览器中,均能够查看原始的XML文件;但是不要指望XML文件直接显示为HTML页面。
2)对于XML的显示,并不是完全无能为力,以下几个节会介绍几个解决显示问题的方案,其中会用到CSS、XSL、JavaScript以及XML数据岛。
9、使用CSS显示XML
通过使用CSS,可以为XML文档添加显示信息
用法:在XML文档第二行做如下声明
<?xml-stylesheet type="text/css" href="cd_catalog.css"?>
标明该XML文档的CSS样式来源,此外在CSS文件中需要为每个自己写的元素补充格式
注意:使用CSS格式化XML不是常用的做法,推荐使用xslt
10、使用XSLT显示XML
通过使用XSLT,可以向XML文档添加显示信息。
1)使用XSLT显示XML
XSLT(eXtensible Stylesheet Language Transformations)是首选的XML样式表语言。它比CSS更加完善。
使用前,同样要在XML文件第二行声明
1 | <? xml-stylesheet type="text-xsl" href="simple.xsl"?> |
把这个XML文件链接到XSL文件。
在使用XSLT来转换XML时,不同的浏览器会产生不同的结果。为了减少这种问题,可以在服务器上进行XSLT转换。
11、XML JavaScript相关
①XMLHttpRequest对象
1)什么是XMLHttpRequest对象
XMLHttpRequest对象用于在后台与服务器交换数据。
XMLHttpRequest对象是开发者的梦想,因为你可以:
- 在不重新加载页面的情况下更新页面
- 在页面已经加载后从服务器请求数据
- 在页面已经加载后从服务器接收数据
- 在后台向服务器发送数据
所有现代浏览器都支持XMLHttpRequest对象,如果想学习更多关于XMLHttpRequest对象的知识,可以看XML DOM 教程。
2)创建XMLHttpRequest对象
1 | xmlhttp = new XMLHttpRequest(); |
3)例子
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性