XML指南——XML 屬性

XML指南——XML 屬性

跟HTML一樣,XML元素再開始標記處可以由元素屬性。

屬性通常包含一些關於元素的額外信息。

XML屬性

XML元素可以擁有屬性。

你一定還記得這樣的HTML代碼吧: <IMG SRC=”computer.gif”>。src是img元素的屬性,提供了關於img元素的額外信息。

在HTML中 (在XML中也一樣)元素的屬性提供了元素的額外信息。

<img src=”computer.gif”>

<a href=”demo.asp”>

書信提供的信息通常不是數據的一部分。在下面的例子中,類型和數據毫不相關,但對於操作這個元素的軟件來說卻相當重要。

<file type=”gif”>computer.gif</file>

引用風格”female” 還是 』female』?

屬性值必須用引號引著。單引號、雙引號都可以使用。例如一個人的性別,person元素可以這樣寫:

<person sex=”female”>

也可以這樣寫: 

<person sex=』female』>

上面的兩種寫法在一般情況下是沒有區別的,使用雙引號的應用更普遍一些。但是在某些特殊的情況下就必須使用單引號,比如下面的例子:

<gangster name=』George “Shotgun” Ziegler』>

  

使用子元素還是使用屬性

數據既可以存儲在子元素中也可以存儲在屬性中。

請看下面的例子:

<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文檔包含了相同的信息:

第一個例子使用了data屬性:

<note date=”12/11/99″>

<to>Tove</to>

<from>Jani</from>

<heading>Reminder</heading>

<body>Don』t forget me this weekend!</body>

</note>

第二個例子使用了data元素:

<note>

<date>12/11/99</date>

<to>Tove</to>

<from>Jani</from>

<heading>Reminder</heading>

<body>Don』t forget me this weekend!</body>

</note>

第三個例子使用了擴展的data元素: (這就是我推薦的樣式):

<note>

<date>

<day>12</day>

<month>11</month>

<year>99</year>

</date>

<to>Tove</to>

<from>Jani</from>

<heading>Reminder</heading>

<body>Don』t forget me this weekend!</body>

</note> 

避免使用屬性?

應該避免使用屬性麼?

這裡有一些使用屬性引發的問題: 

屬性不能包含多個值(子元素可以)。 

屬性不容易擴展。 

屬性不能夠描述結構(子元素可以)。 

屬性很難被程序代碼處理。 

屬性值很難通過DTD進行測試。 

如果使用屬性來存儲數據,那麼所編寫的XML文檔一定很難閱讀和操作。盡量使用元素來描述數據,僅使用屬性來描述那些與數據關係不大的額外信息。

不要象下面的例子那樣(如果你那麼做了說明你還沒有明白上面的觀點)。

<note day=”12″ month=”11″ year=”99″

to=”Tove” from=”Jani” heading=”Reminder” 

body=”Don』t forget me this weekend!”>

</note> 

屬性規則的例外

規則總是有例外的。

我的關於屬性的規則也有一個例外:

有些時候應該為一個元素設計一個ID引用,通過這個ID可以引用存取特定的XML元素,就像HTML中的name和id屬性一樣。請看下面的例子:

<messages>

<note ID=”501″>

<to>Tove</to>

<from>Jani</from>

<heading>Reminder</heading>

<body>Don』t forget me this weekend!</body>

</note>

<note ID=”502″>

<to>Jani</to>

<from>Tove</from>

<heading>Re: Reminder</heading>

<body>I will not!</body>

</note> 

</messages>

在上面的例子中,ID屬性就相當於一個計數器,或者是一個唯一的標識符,在XML文檔中標識不同的便條信息,他不是便條信息的一部分。

我們所要盡力向讀者說明的是:元數據(與數據有關的數據)應該以屬性的方式存儲,而數據本身應該以元素的形式存儲。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/111025.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • aardio界面库_aardio有什么用

    aardio界面库_aardio有什么用之前想写一个图形界面化工具,了解了MFC、Qt,最后选了PyQt4,毕竟自己对python比较了解一些。后来同事推荐了一个aardio工具,发现确实很简便,不用什么乱七八糟的配置,安装包只有5.5M,安装编译,使用也简单。但也有不好的地方,因为使用比较少,所以有很多问题没法找到答案,这也是新语言的一种必然的过程。Anyway,膜拜一下大神。aardio官方社区:http://bbs.aardio….

  • sql中对嵌套查询的处理原则_sql的多表数据嵌套查询

    sql中对嵌套查询的处理原则_sql的多表数据嵌套查询在做嵌套查询时,如果嵌套的条件在另一张表中没有数据,则会报错。这时候可以用:

  • iscsiadm命令详解_adm激活成功教程版

    iscsiadm命令详解_adm激活成功教程版iscsiadm是open-iscsi包中的一个工具,用来发现和登陆iSCSItar

  • Nelder–Mead method

    Nelder–Mead method

  • Springboot源码结构预览「建议收藏」

    Springboot源码结构预览「建议收藏」系列文章目录Springboot学习系列一、Springboot源码结构预览二、Springboot运行原理三、Springboot源码流程构造分析四、Springboot运行流程构造分析五、SpringbootWeb应用源码解析文章目录系列文章目录概述二、Springboot源码1.源码获取2.源码调试3.目录结构3.目录结构总结学习目标:学习内容:学习时间:学习产出:概述Springboot源码获取、调试、目录结构、设计理念、整体架构。二、Springboot源码1.源

  • 重复字符串 leetcode_字符串中出现最多的子串 leetcode

    重复字符串 leetcode_字符串中出现最多的子串 leetcode原题链接给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb”输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,”pwk

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号