>>与软件开发有关的知识:操作系统,数据库,网络通信等 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 26158 个阅读者 刷新本主题
 * 贴子主题:  比较XML的子元素和属性 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2020-01-30 23:43:56     消息  查看  搜索  好友  邮件  复制  引用

  

比较XML的子元素和属性

  在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="12/11/2002">
<to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

本例中使用"date"元素:


<note>
  <date>12/11/2002</date>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

本例中使用了扩展的"date" 元素: (这是我最喜欢的方式):


<note>
  <date>
    <day>12</day>
    <month>11</month>
     <year>2002</year>
  </date>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

避免使用属性

你应该避免使用属性

一些属性具有以下问题:
  • 属性不能包含多个值(子元素可以)
  • 属性不容易扩展(为以后需求的变化)
  • 属性无法描述结构(子元素可以)
  • 属性更难以操纵程序代码
  • 属性值是不容易测试,针对DTD
如果您使用属性作为数据容器,最终的XML文档将难以阅读和维护。 尝试使用元素来描述数据。只有在提供的数据是不相关信息时我们才建议使用属性。

不要这个样子结束(这不是XML应该使用的):


<note day="12" month="11" year="2002"

   to="Tove" from="Jani" heading="Reminder"

   body="Don't forget me this weekend!">

</note>

一个属性规则的例外

规则总是有另外的

关于属性的规则我有一个例外情况。

有时我指定的 ID 应用了元素。这些 ID 应用可在HTML中的很多相同的情况下可作为 NAME 或者 ID 属性来访问 XML 元素。以下实例展示了这种方式:


<messages>

  <note id="p501">
   <to>Tove</to>
   <from>Jani</from>
   <heading>Reminder</heading>
   <body>Don't forget me this weekend!</body>
  </note>

  <note id="p502">
    <to>Jani</to>
   <from>Tove</from>
   <heading>Re: Reminder</heading>
   <body>I will not!</body>
  </note>

</messages>

以上实例的XML文件中,ID是只是一个计数器,或一个唯一的标识符,来识别不同的音符,而不是作为数据的一部分。

在这里我想说的是,元数据(关于数据的数据)应当存储为属性,而数据本身应当存储为元素。




程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 sunshine 在 2020-02-02 11:32:30 重新编辑]
  Java面向对象编程-->数组
  JavaWeb开发-->使用Session(Ⅱ)
  JSP与Hibernate开发-->Java对象持久化技术概述
  Java网络编程-->通过JavaMail API收发邮件
  精通Spring-->Vue组件开发基础
  Vue3开发-->计算属性和数据监听
  关于Mongodb的全面总结
  MySQL不推荐使用uuid或者雪花id作为主键
  mysql分区(partition)
  神奇的 SQL 之 WHERE 条件的提取与应用
  8种最坑的SQL错误用法,第一个就很坑?
  MySQL 正则表达式
  SQL的数学函数
  SQL CREATE VIEW、REPLACE VIEW、 DROP VIEW 语句
  SQL的创建索引( CREATE INDEX) 语句的用法
  SQL PRIMARY KEY 约束
  SQL INSERT INTO SELECT 语句
  从十年运维看“云”维趋势
  深入浅出一致性Hash原理
  mysql主从复制的步骤
  Java 操作系统篇
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。