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)


相关推荐

  • 为什么pycharm找不到模块_pycharm project interpreter

    为什么pycharm找不到模块_pycharm project interpreter如果要连接服务器的话,是需要在deployment里进行操作的,但是有时候不管怎么找,在Pycharm中都找不到。(PS:我就遇到了这样的问题)其实原因很简单,你装的Pycharm可能是社区版,不具有远程连接服务器的功能,只需要下载一个专业版就行。用学生账号免费使用专业版的方法可参照这个:https://blog.csdn.net/weixin_45459911/article/details…

  • burpsuite 越权_自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数…

    burpsuite 越权_自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数…IDOR(越权)漏洞:也称为“不安全的直接对象引用”,当用户请求访问内部资源或基于用户提供的输入对象进行访问,服务器未执行合理的权限验证时,发生当前用户可以未经授权访问不属于其帐户权限的资源或数据。我们可以在BurpSuite插件库Bapp中安装Autorize和Autorepeater:使用Autorize发现IDOR漏洞让我们先来看一下“Autorize”。对于客户端发送的任何请求,它将执行…

  • 设计模式六大原则(6):开闭原则[通俗易懂]

    设计模式六大原则(6):开闭原则

  • JS 对象(Object)和字符串(String)互转[通俗易懂]

    JS 对象(Object)和字符串(String)互转[通俗易懂]利用原生JSON对象,将对象转为字符串varjsObj={};jsObj.testArray=[1,2,3,4,5];jsObj.name=’CSS3′;jsObj.date=’8May,2011′;varstr=JSON.stringify(jsObj);alert(str);从JSON字符串转为对象varjsObj={};jsObj.t

  • 计算机传真,电脑收发传真

    计算机传真,电脑收发传真WindowsXP有一项免费的传真功能,用它可以轻松收发传真,不用再买传真机了,可以通过网络直接发送。这里将发传真的具体操作步骤介绍如下,你只要照着做,一定就会收发传真。还可以用他来做打印机!中文名电脑收发传真特点免费的传真功能系统WindowsXP优点可以实现移动办公用于做打印机电脑收发传真操作步骤编辑语音电脑收发传真安装传真组件在WindowsXP-F收发…

  • 单片机控制步进电机正反转c语言程序,单片机控制步进电机1步10步100步正反转…

    单片机控制步进电机正反转c语言程序,单片机控制步进电机1步10步100步正反转…原标题:单片机控制步进电机1步10步100步正反转一,程序设计方案的构想:1)的控制原理步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件.在非超载的情况下,电机的转速,停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响.即给电机加一个信号,电机则转过一个步距角.这一线形关系的存在,加上步进电机只有周期性的误差而无积累误差等特点,使得在线速度,位置等控制领域用步进电机来控制变的…

发表回复

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

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