zoukankan      html  css  js  c++  java
  • XML文件

    XML 指可扩展标记语言eXtensible Markup Language

    XML 被设计用来传输和存储数据。


    什么是 XML?

    • XML 指可扩展标记语言
    • XML 是一种标记语言,非常类似 HTML
    • XML 的设计宗旨是数据传输,而非显示数据
    • XML 标签没有被提前定义,您须要自行定义标签
    • XML 被设计为具有自我描写叙述性


     XML 不会做不论什么事情

    XML 被设计用来结构化、存储以及传输信息。

    以下是 John 写给 George 的便签(note),存储为 XML:

    <note>
    <to>George</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Don't forget the meeting!</body>
    </note>

    上面的这条便签具有自我描写叙述性。它拥有标题以及留言,同一时候包括了发送者和接受者的信息。

    可是,这个 XML 文档仍然没有做不论什么事情。它不过包装在 XML 标签中的纯粹的信息。我们须要编写软件或者程序,才干传送、接收和显示出这个文档。


    XML 不过纯文本

    XML 没什么特别的。它不过纯文本而已。有能力处理纯文本的软件都能够处理 XML。

    只是,可以读懂 XML 的应用程序可以有针对性地处理 XML 的标签。标签的功能性意义依赖于应用程序的特性。


    通过 XML 您能够发明自己的标签

    上例中的标签没有在不论什么 XML 标准中定义过(比方 <to> 和 <from>)。这些标签是由文档的创作者发明的。

    这是由于 XML 没有提前定义的标签。

    在 HTML 中使用的标签(以及 HTML 的结构)是提前定义的。HTML 文档仅仅使用在 HTML 标准中定义过的标签(比方 <p> 、<h1> 等等)。

    XML 同意创作者定义自己的标签和自己的文档结构。


    一个 XML 文档实例

    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 = Latin-1/西欧字符集)。

    下一行描写叙述文档的根元素(像在说:“本文档是一个便签”):

    <note>

    接下来 4 行描写叙述根的 4 个子元素(to, from, heading 以及 body):

    <to>George</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Don't forget the meeting!</body>
    

    最后一行定义根元素的结尾:

    </note>

    从本例能够设想,该 XML 文档包括了 John 给 George 的一张便签。

    XML 具有出色的自我描写叙述性,你允许吗?


    XML 文档形成一种树结构

    XML 文档必须包括根元素。该元素是全部其它元素的父元素。

    XML 文档中的元素形成了一棵文档树。这棵树从根部開始,并扩展到树的最底端。

    全部元素均可拥有子元素:

    <root>
      <child>
        <subchild>.....</subchild>
      </child>
    </root>
    

    父、子以及同胞等术语用于描写叙述元素之间的关系。父元素拥有子元素。同样层级上的子元素成为同胞(兄弟或姐妹)。

    全部元素均可拥有文本内容和属性(类似 HTML 中)。


    实例

    上图表示以下的 XML 中的一本书:

    <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>J K. 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> 元素都被包括在 <bookstore> 中。

    <book> 元素有 4 个子元素:<title>、< author>、<year>、<price>。



    全部 XML 元素都须有关闭标签

    在 HTML,常常会看到没有关闭标签的元素:

    <p>This is a paragraph
    <p>This is another paragraph
    

    在 XML 中,省略关闭标签是非法的。全部元素都必须有关闭标签:

    <p>This is a paragraph</p>
    <p>This is another paragraph</p>  
    

    凝视:您或许已经注意到 XML 声明没有关闭标签。这不是错误。声明不属于XML本身的组成部分。它不是 XML 元素,也不须要关闭标签。


    XML 标签对大写和小写敏感

    XML 元素使用 XML 标签进行定义。

    XML 标签对大写和小写敏感。在 XML 中,标签 <Letter> 与标签 <letter> 是不同的。

    必须使用同样的大写和小写来编写打开标签和关闭标签:

    <Message>这是错误的。</message>
    
    <message>这是正确的。</message> 
    

    凝视:打开标签和关闭标签通常被称为開始标签和结束标签。不论您喜欢哪种术语,它们的概念都是同样的。



    在 XML 中,全部元素都必须彼此正确地嵌套:

    <b><i>This text is bold and italic</i></b>

    上例的意思是:因为 <i> 元素是在 <b> 元素内打开的,那么它必须在 <b> 元素内关闭。


    XML 文档必须有根元素

    XML 文档必须有一个元素是全部其它元素的父元素。该元素称为根元素

    <root>
      <child>
        <subchild>.....</subchild>
      </child>
    </root>


    XML 的属性值须加引號

    与 HTML 类似,XML 也可拥有属性(名称/值的对)。

    在 XML 中,XML 的属性值须加引號。请研究以下的两个 XML 文档。第一个是错误的,第二个是正确的:

    <note date=08/08/2008>
    <to>George</to>
    <from>John</from>
    </note> 
    
    <note date="08/08/2008">
    <to>George</to>
    <from>John</from>
    </note> 
    

    在第一个文档中的错误是,note 元素中的 date 属性没有加引號。


    XML 中的凝视

    在 XML 中编写凝视的语法与 HTML 的语法非常相似:

    <!-- This is a comment --> 


    什么是 XML 元素?

    XML 元素指的是从開始标签直到结束标签的部分。

    元素可包括其它元素、文本或者两者的混合物。元素也能够拥有属性。

    <bookstore>
    <book category="CHILDREN">
      <title>Harry Potter</title> 
      <author>J K. Rowling</author> 
      <year>2005</year> 
      <price>29.99</price> 
    </book>
    <book category="WEB">
      <title>Learning XML</title> 
      <author>Erik T. Ray</author> 
      <year>2003</year> 
      <price>39.95</price> 
    </book>
    </bookstore> 
    

    在上例中,<bookstore> 和 <book> 都拥有元素内容,由于它们包括了其它元素。<author> 仅仅有文本内容,由于它仅包括文本。

    在上例中,仅仅有 <book> 元素拥有属性 (category="CHILDREN")。


    XML 元素能够在開始标签中包括属性,类似 HTML。

    属性 (Attribute) 提供关于元素的额外(附加)信息。


    XML 属性必须加引號

    属性值必须被引號包围,只是单引號和双引號均可使用。比方一个人的性别,person 标签能够这样写:

    <person sex="female">

    或者这样也能够:

    <person sex='female'>

    凝视:假设属性值本身包括双引號,那么有必要使用单引號包围它,就像这个样例:

    <gangster name='George "Shotgun" Ziegler'>

    或者能够使用实体引用:

    <gangster name="George &quot;Shotgun&quot; Ziegler">


    XML 元素 vs. 属性

    请看这些样例:

    <person sex="female">
      <firstname>Anna</firstname>
      <lastname>Smith</lastname>
    </person> 
    
    <person>
      <sex>female</sex>
      <firstname>Anna</firstname>
      <lastname>Smith</lastname>
    </person> 
    

    在第一个样例中,sex 是一个属性。在第二个样例中,sex 则是一个子元素。两个样例均可提供同样的信息。

    没有什么规矩能够告诉我们什么时候该使用属性,而什么时候该使用子元素。我的经验是在 HTML 中,属性用起来非常便利,可是在 XML 中,您应该尽量避免使用属性。假设信息感觉起来非常像数据,那么请使用子元素吧。


    我最喜欢的方式

    以下的三个 XML 文档包括全然同样的信息:

    第一个样例中使用了 date 属性:

    <note date="08/08/2008">
    <to>George</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Don't forget the meeting!</body>
    </note> 
    

    第二个样例中使用了 date 元素:

    <note>
    <date>08/08/2008</date>
    <to>George</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Don't forget the meeting!</body>
    </note> 
    

    第三个样例中使用了扩展的 date 元素(这是我的最爱):

    <note>
    <date>
      <day>08</day>
      <month>08</month>
      <year>2008</year>
    </date>
    <to>George</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Don't forget the meeting!</body>
    </note>


    避免 XML 属性?

    因使用属性而引起的一些问题:

    • 属性无法包括多重的值(元素能够)
    • 属性无法描写叙述树结构(元素能够)
    • 属性不易扩展(为未来的变化)
    • 属性难以阅读和维护

    请尽量使用元素来描写叙述数据。而只使用属性来提供与数据无关的信息。

    不要做这种蠢事(这不是 XML 应该被使用的方式):

    <note day="08" month="08" year="2008"
    to="George" from="John" heading="Reminder" 
    body="Don't forget the meeting!">
    </note>


    针对元数据的 XML 属性

    有时候会向元素分配 ID 引用。这些 ID 索引可用于标识 XML 元素,它起作用的方式与 HTML 中 ID 属性是一样的。这个样例向我们演示了这样的情况:

    <messages>
      <note id="501">
        <to>George</to>
        <from>John</from>
        <heading>Reminder</heading>
        <body>Don't forget the meeting!</body>
      </note>
      <note id="502">
        <to>John</to>
        <from>George</from>
        <heading>Re: Reminder</heading>
        <body>I will not</body>
      </note> 
    </messages>
    

    上面的 ID 不过一个标识符,用于标识不同的便签。它并非便签数据的组成部分。

    在此我们极力向您传递的理念是:元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素。


  • 相关阅读:
    Lua大整数的实现
    std::allocator在stl容器中使用问题
    深度学习框架安装
    Tensorflow安装使用一段时间后,import时出现错误:ImportError: DLL load failed
    论文解读:SIFA
    多位微软MVP推荐,第一本ASP.NET Core 3.1的书来了
    ASP.NET Core 进程内与进程外的性能对比
    基于Netty的程序主动发送消息
    dbroot文件结构解析(一)
    qtree文件结构解析(二)
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3782756.html
Copyright © 2011-2022 走看看