XML学习笔记(一)

我们这学期的XML已经上了五周了,但是感觉老师就像什么都没讲,还是要靠自己看书,所以我想趁着刚记下来的东西还没有忘,赶紧做个笔记。

XML基础知识

XML(eXtensible Markup Language,可拓展标记语言)是为了解决HTML不擅于处理数据的问题而开发出来的一种规范,因此,作为HTML的补充(不是替代,是补充),它就是专门用来处理数据的。

XML的特点

  • 可拓展性(Extensibility)。XML可以使用自己创造的标签,只要符合基本的语法,就是合格的XML文件,可以说是相当开放了。
  • 灵活性(Flexibility)。XML作为单纯的文本文件,可以轻松地结合各项技术,这让它有了很大的发挥空间。
  • 自描述性(Self-describing)。因为便签都是自己定义的,所以非常容易读懂,同时计算机也能处理。
  • 简洁性(Simplicity)。这是和SMGL相比而言的,嗯,然而我并不知道SMGL是什么 = =

XML规范

XML声明

声明可以没有,但如果有,必须是第一行!

一般格式:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

其中,version指的是当前XML的版本号,这个属性是必须要有的。encoding是编码方式,这个可以没有。standalone表示这个文件是独立的还是引用了其他的外部文件,这个也可以没有,解析器会自动判定。

XML处理指令和注释

处理指令一般写在文件开头,格式为:

<? target-name data ?>

注释和HTML一样,也是:

<!--  注释 -->

要注意的是,注释要占单独的一行!不能写在标签里面,注释里面也不能嵌套注释!

XML中的元素与属性

在XML中,元素(Element)是最基本的组成单元,基本的语法如下:

<element_name att1="val1" att2="val2">      --开始标记
content                                     --内容
</element_name>                             --结束标记

元素通常由开始标记和结束标记进行界定,开始标记中可以包含一些相关的属性(如att1);在开始标记和结束标记之间的数据被称为元素的内容。元素中可以包含文本和子元素。

     开始标记和结束标记必须相互对应,嵌套的顺序也必须对应!

属性不能独立于元素存在,通常以名-值对的形式出现,属性的取值必须加上引号(单引号或双引号)。

属性和元素的命名规则:

  • 元素和属性的名称必须以字母、下划线( _ )或者冒号(:)开头
  • 名称的其余部分可以是字母,数字、横线(-)、下划线( _ )、点号( . )和冒号(:)
  • 元素名称大小写敏感
  • 名称长度没有限制

       值得注意的是,虽然子元素和属性都可以用来刻画元素某个方面的特征,但最好只用属性来表示一些无关的数据,因为子元素的值更容易修改,这样更容易对XML的数据进行操作。

XML文本内容和CDATA段

XML虽然允许使用任意字符,但由于"<"、">"和"/"这些字符本身具有特殊的含义,所以是不能随便使用的,一般来说,要使用的话有两种方式:

(1)使用预定义实体,也就是用事先定义好的字符串来代替某些特殊字符。

     如"<"="&lt",">"="gt","&"="&amp"等等

但是这种方法一方面不太方便,另一方面降低了XML的可读性。

(2)使用CDATA段。CDATA可以理解为一个标志,告诉解析器CDATA段中的文本没有XML标记,换句话说,解析器不会对段中的文本进行解析。格式为:<![CDATA[......]]>

<content><![CDATA[an XML character>]]><content>

命名空间

命名空间(namespace)在计算机各个领域都有着广泛的应用,主要是用来表示标识符(identifier)的上下文。

一般用来解决函数和变量等重名的问题,当命名冲突时,只要把它们放到不同的命名空间就可以解决了。

命名空间的声明和使用

命名空间的声明类似属性:

<namespace:element-name xmlns:namespace="url">
element_content
</namespace:element-name>

namespace:element-name表示这个元素属于namespace这个命名空间,但namespace并不是命名空间的名字,仅仅只是一个符号化的表示,URL才是命名空间的全称。

在同一个命名空间中,元素或属性的名称必须唯一,但不同的命名空间可以嵌套。

<?xml version="1.0">
<ns:company xmlns="http://www.company.com">
    <ns:company-info>
        <ns:name>Company</ns:name>
        <ns:address>Baker Street 221B</ns:address>
        <ns1:employee xmlns="http://employee.com">
            <ns1:name>Sherlock</ns1:name>
            <ns1:job>detective</ns1:job>
        </ns1:employee>
    </ns:company-info>
</ns:company>
在这个例子中,有两个name元素,但是由于它们属于不同的命名空间,所以不会发生冲突。

由于每次都需要输入命名空间的前缀,显得非常麻烦,XML规范中提供了一种缺省机制,当省略命名空间前缀时,默认定义命名空间的元素内的内容都属于该命名空间,根据缺省机制,上面的例子可以简化为:

<?xml version="1.0">
<company xmlns="http://www.company.com">
    <company-info>
        <name>Company</ns:name>
        <address>Baker Street 221B</ns:address>
        <ns1:employee xmlns="http://employee.com">
            <ns1:name>Sherlock</ns1:name>
            <ns1:job>detective</ns1:job>
        </ns1:employee>
    </company-info>
</company>
文档表示的含义没有变化,然而修改后显得更加简洁,甚至ns1也可以改为局部缺省的命名空间,这样使得编写文档变得更加轻松。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值