使用父XML元素作为重复出现的子元素的容器? [英] Use a parent XML element as a container for reoccurring child elements?

查看:144
本文介绍了使用父XML元素作为重复出现的子元素的容器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设您希望允许某个特定的XML元素出现0次以上。例如,< record> 元素可以多次出现:

 < repository> 
< record> Record 1< / record>
< record> Record 2< / record>
< record> Record 3< / record>
< / repository>

有没有任何令人信服的理由将父元素包含为容器?例如,以下使用< recordSet> 元素来包含< record> 元素:

 < repository> 
< recordSet>
< record> Record 1< / record>
< record> Record 2< / record>
< record> Record 3< / record>
< / recordSet>
< / repository>

在试图找到任何相关问题之前,感谢您提供任何及所有输入!






编辑 - 2009年7月22日: / p>

感谢大家的优秀反馈! (我会评论/投票人,但我还没有足够的声誉点。)我可能会继续这条路线,我还想感谢@ 16bytes的建议,包括简单地命名父通过使用多个重复出现的子元素。

解决方案

拥有父元素使得更容易识别XML的部分,它更容易处理程序将子元素映射到集合。
如果你有一个系统禁止使用属性(有些做,这是恼人的),你还需要使用包装元素来区分属于特定的孩子的属性(如ids)。



除此之外,省略父元素是有效的,并且可以使文件明显减少冗长。



在第一个示例中,用户元素可能与记录混合,这是有效的,但可能很难发现:

 < repository> 
< record> Record 1< / record>
< record> Record 2< / record>
< user> Bill< / user>
< record> Record 3< / record>
< / repository>

而使用周围元素,您可以分离集合,并拥有该集合的多个实例:

 < repositories> 
< users>
< user> Bill< / user>
< / users>
< repository>
< id> id1< / id>
< recordSet>
< id> recordSet1< / id>
< record> Record 1< / record>
< record> Record 2< / record>
< record> Record 3< / record>
< / recordSet>
< recordSet>
< id> recordSet2< / id>
< record> Record 1< / record>
< record> Record 2< / record>
< record> Record 3< / record>
< / recordSet>
< / repository>
< repository>
< id> id2< / id>
< recordSet>
< record> Record 1< / record>
< record> Record 2< / record>
< record> Record 3< / record>
< / recordSet>
< / repository>
< / repositories>


Let's say you want to allow some particular XML element to occur 0+ times. For example, the <record> element can occur multiple times:

<repository>
  <record>Record 1</record>
  <record>Record 2</record>
  <record>Record 3</record>
</repository>

Are there any compelling reasons to include a parent element as a container for these? For example, the following uses the <recordSet> element to contain the <record> elements:

<repository>
  <recordSet>
    <record>Record 1</record>
    <record>Record 2</record>
    <record>Record 3</record>
  </recordSet>
</repository>

I tried to find any related questions before posing this, so my apologies if it has been asked already. Thanks in advance for any and all input!


Edit - July 22, 2009:

Thanks to everyone for the excellent feedback! (I would comment / vote people up, but I don't have enough reputation points quite yet.) I'll probably go ahead with this route, and I also wanted to thank @16bytes for their advice, including to simply name the parent by using the plural of the reoccurring child elements.

解决方案

Having a parent element makes it simpler to identify sections of the XML and makes it simpler for handlers to map the child elements to a collection. If you have a system that forbids the use of attributes (some do, it's annoying), you also need to use wrapper elements to distinguish properties (such as ids) that belong to particular children.

Other than that it is valid to omit the parent element and can make the file markedly less verbose.

In your first example, a user element could be mingled in with the records, this is valid but it might be hard to spot:

<repository>
  <record>Record 1</record>
  <record>Record 2</record>
  <user>Bill</user>
  <record>Record 3</record>
</repository>

Whereas with a surrounding element you can separate the collection, and have multiple instances of that collection:

<repositories>
  <users>
    <user>Bill</user>
  </users>
  <repository>
    <id>id1</id>
    <recordSet>
      <id>recordSet1</id>
      <record>Record 1</record>
      <record>Record 2</record>
      <record>Record 3</record>
    </recordSet>
    <recordSet>
      <id>recordSet2</id>
      <record>Record 1</record>
      <record>Record 2</record>
      <record>Record 3</record>
    </recordSet>
  </repository>
  <repository>
    <id>id2</id>
    <recordSet>
      <record>Record 1</record>
      <record>Record 2</record>
      <record>Record 3</record>
    </recordSet>
  </repository>
</repositories>

这篇关于使用父XML元素作为重复出现的子元素的容器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆