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文檔中標識不同的便條信息,他不是便條信息的一部分。

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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java 构造器 构造方法_Java构造器(构造方法/constructor)

    java 构造器 构造方法_Java构造器(构造方法/constructor)我们先来看一下什么是构造器:1、构造器也叫构造方法或构造函数,分为有参构造器和无参构造器;2、构造器也是一种方法,只不过是一种特殊的方法,它会在对象创建的时候被调用;3、构造器最大的作用就是在创建对象的时候进行对象的初始化,有参构造器可以实现对象传参(后面会比较着来看有参构造器方便在哪儿了);4、一个类可以有零个(如果没有自己定义编译器会帮你提供无参构造器)或多个构造器(【重载】不知道重载定义的小…

    2025年6月11日
    1
  • pycharm运行时报configuration错误「建议收藏」

    pycharm运行时报configuration错误「建议收藏」在新建一个.py文件用pycharm打开运行时,报以下错误错误原因是该项目未配置正确的python解释器。在filesetting中找到解释器位置下拉选项,找到下载好的python解释器然后applyOK即可正确运行。…

    2022年8月26日
    9
  • response的contentType的类型值

    response的contentType的类型值转自:http://blog.csdn.net/andyzhaojianhui/article/details/72875698本文导读:ContentType属性指定服务器响应的HTTP内容类型。如果未指定ContentType,默认为text/html。response的ContentType()的作用是使客户端浏览器,区分不同种类的数据,并根据不同的MI

    2022年7月19日
    22
  • 数组和链表的区别浅析

    数组和链表的区别浅析1.链表是什么链表是一种上一个元素的引用指向下一个元素的存储结构,链表通过指针来连接元素与元素;链表是线性表的一种,所谓的线性表包含顺序线性表和链表,顺序线性表是用数组实现的,在内存中有顺序排列,通过改变数组大小实现。而链表不是用顺序实现的,用指针实现,在内存中不连续。意思就是说,链表就是将一系列不连续的内存联系起来,将那种碎片内存进行合理的利用,解决空间的问题。所以,链表允许插入和删…

    2022年6月15日
    36
  • Shell 脚本:DDNS for aliyun

    Shell 脚本:DDNS for aliyun#!/bin/bashset-e#================================================================================================================##功能:用于更新阿里云域名IP,实现DDNS功能##在http://www.gebi1.com/forum.php?mod=viewthread&tid=287344&page=1&_dsign=8f94f7

    2022年5月29日
    82
  • 二维数组a[3][4]_树状数组和线段树的区别

    二维数组a[3][4]_树状数组和线段树的区别原题链接堆栈是一种经典的后进先出的线性结构,相关的操作主要有“入栈”(在堆栈顶插入一个元素)和“出栈”(将栈顶元素返回并从堆栈中删除)。本题要求你实现另一个附加的操作:“取中值”——即返回所有堆栈中元素键值的中值。给定 N 个元素,如果 N 是偶数,则中值定义为第 N/2 小元;若是奇数,则为第 (N+1)/2 小元。输入格式:输入的第一行是正整数 N(≤10​5​​ )。随后 N 行,每行给出一句指令,为以下 3 种之一:Push keyPopPeekMedian其中 key 是不超过

    2022年8月8日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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