>>与软件开发有关的知识:操作系统,数据库,网络通信等 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 20735 个阅读者 刷新本主题
 * 贴子主题:  比较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网络编程-->用Spring整合CXF发布Web服务
  精通Spring-->Vue组件开发高级技术
  Vue3开发-->通过Vuex进行状态管理
  Https的1.0、2.0协议及长短链接区别
  针对 MySQL IO 特点进行的存储优化揭秘
  一条垃圾SQL,把 64 核 CPU 快跑崩了!
  神奇的 SQL 之 联表细节 → MySQL JOIN 的执行过程
  构建高大上的MySQL监控平台
  SQL AUTO INCREMENT 字段
  SQL UNIQUE 约束
  SQL 通配符
  MySQL:如何用 SELECT 语句的 WHERE 子句过滤返回的数据
  从十年运维看“云”维趋势
  MySQL5.7慢查询日志时间与系统时间差8小时原因
  CentOS7.5使用mysql_multi方式安装MySQL5.7.28多实例
  电脑启动不起来,提示Reboot and select proper boot device ...
  我心中的MySQL DBA
  开发好几年,你真的懂MQ嘛(RabbitMQ为例)?看完别说难搞哦
  更多...
 IPIP: 已设置保密
树形列表:   
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


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