XML

学习自:

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 &lt; 1000 then </message> 正确

在XML中,有5个预定义的实体引用:

< &lt;  
> &gt;  
& &amp; 和,and
' &apos;  
" &quot;  

补充:在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

通过使用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)例子

XMLHttpRequest 对象

 

posted @   ShineLe  阅读(73)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示