XML学习(2)------由浅入深熟悉XML

上一篇我们初步了解了XML的特点和用途,这一篇,我们将一起由浅入深学习XML的树结构、语法、元素等内容。

--------------------------------------------------------------------------------------------------------------------------------------------------------

一、XML的结构——树结构

不知道大家是否还记得上一篇的例子,这里我们再举一个的栗子:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Rose</to>
<from>Jake</from>
<heading>Invitation</heading>
<body>Let's have dinner together!</body>
</note>
我们来分析一下这个栗子,第一行是XML的声明,定义了XML的版本(1.0)和所使用的编码方式(ISO-8859-1); 第二行是文档的根元素,可以理解为描述文挡的关键词,即文章是一个note;接下来四行描述了根的四个子元素,即<to><from><heading><body>,这四个子元素相当于描述了根元素的内部结构,即note内部包括的内容有收件人、发件人、标题以及主体四个部分;最后一行定义了根元素的结尾。

本例应该是十分清晰地展现出了XML的结构特征,下面我们做一下总结:

1、XML文档必须包含根元素,该元素是其它所有元素的父元素;

2、XML文档的元素形成了一课树形结构,所有元素均可以拥有子元素:

<root>
    <child>
        <subchild>...</subchild>
    </child>
</root>
3、下面我们假设用XML来描述一个书店 (取自W3School,侵删):

<bookstore>
<book category="COOKING">
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
</book>
<book category="CHILDREN">
     <title lang="en">HARRY POTTER</title>
     <author>JK.Rowling</author>
     <year>2005</year>
     <price>29.99</price>
</book>
<book category="WEB">
     <title lang="en">Learning XML</title>
     <author>Erik T.Ray</author>
     <year>2003</year>
     <price>39.95</price>
</book>
</bookstore>
例子中可以看出来<bookstore>是根元素,含有子元素<book>,其又含有子元素<title><author><year><price>,其中对<book>和<title>有更详细地描述,我们后面接着讲。

二、XML的语法规则

XML的语法规则相对简单易学,下面我们对其语法规则进行罗列。

1、XML的所有元素都必须要有关闭标签,从前面的例子我们可以看到类似<book></book>的标签均是成对出现的,后者即为关闭标签,相应的前者为打开标签(或称为 开始标签、结束标签);(XML的声明是不需要关闭标签的,因为声明不属于XML本身,也不是元素,故而不需要关闭标签)

2、标签对大小写敏感,<book></Book>是非法的;

3、XML必须正确嵌套,例如

<a><b>This is wrong</a></b>
<a><b>This is true</b></a>

所谓正确嵌套就是<b>在<a>中打开,那么<b>也应当在<a>中关闭;

4、XML的属性值必须加引号,例如前面的

<book category="COOKING">
5、对于一类特殊的引用,例如"<"放在XML的引用中会发生错误,编译器会当做是新元素的开始来处理,因此我们会使用实体引用来代替,在XML中有五个预定义好的实体引用:
&lt;<
&gt;>
&amp;&
&apos;'
&quot;"
6、XML的注释,使用<!--这是注释-->的格式即可;

三、XML的元素

1、XML元素的含义,其实在前面的例子中我们已经多次提到了元素这个概念,元素是指从开始标签到结束标签的部分(包括开始标签和结束标签);元素可以包含其他元素、文本或者两者混合,元素也可以拥有属性;

2、XMl的命名规则,元素不能以数字或者标点开始,不能包含空格,不能以字符xml(或其改变大小写)开始;

3、XML的元素可以扩展,以便携带更多的信息,什么叫可扩展呢,举个栗子,此前我们有这样的XML

<note>
<to>Rose</to>
<from>Jake</from>
<heading>Invitation</heading>
<body>Let's have dinner together!</body>
</note>
Jake约Rose吃晚饭,我们写了个小程序可以将<to><from><body>的元素提取出来,并产生下面输出:

To:Rose
From:Jake

Let's have dinner together!

此时程序在运行中,然后我们向XML文档中又添加了一些额外信息:

<note>
<date>2017-02-28</date>
<to>Rose</to>
<from>Jake</from>
<heading>Invitation</heading>
<body>Let's have dinner together!</body>
</note>
此时程序会挂掉吗?答案是不会,程序依然能够找到<to><from><body>并将其中的元素提取出来。因此联想到之前我们提到的和HTML的分离,XML可以实现应用程序不中断的情况下对底层数据进行扩展。


四、XML的属性
上文提到属性这个概念,例如<book category = "COOKING">就是一个很好的例子,属性提供了关于元素的附加信息,属性的值是必须要加引号的。
属性和元素在很多情况下可以互通使用,还是上面Jake邀请Rose吃饭的例子,我们还有另外两种:

<note date="2017-02-28">
<to>Rose</to>
<from>Jake</from>
<heading>Invitation</heading>
<body>Let's have dinner together!</body>
</note>
或者扩展方式:
<note>
<date>
     <day>28</day>
     <month>2</month>
     <year>2017</year>
</date>
<to>Rose</to>
<from>Jake</from>
<heading>Invitation</heading>
<body>Let's have dinner together!</body>
</note>
这三种方式中,我们更加建议的是避免使用XML属性,因为属性嵌套、属性无法描述树形结构、属性不易扩展、同时属性难以阅读和维护,因此更建议使用元素的方式来构建XML文档。
TIPS:
针对元数据时(data about data即描述数据的数据),例如有时候会分配ID,用这些ID来标识XML元素,仍然使用上面的例子,我们做一些扩展:
<messages>
   <note id="1">
      <to>Rose</to>
      <from>Jake</from>
      <heading>Invitation</heading>
      <body>Let's have dinner together!</body>
   </note>
   <note id="2">
      <to>Jake</to>
      <from>Rose</from>
      <heading>Re:Invitation</heading>
      <body>Let's have dinner together!</body>
   </note>
<message>
对于属性和元素的使用,更建议的是:元数据应当存储为属性,而数据本身应当存储为元素!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值