3

哪种约定是首选的,为什么(包括一种优于另一种的一些优点和缺点)?

这:

<company>
    <employees>
        <employee />
        <employee />
        <employee />
    </employees>
    <buildings>
        <building />
        <building />
    </building>
</company>

或这个:

<company>
    <employee />
    <employee />
    <employee />
    <building />
    <building />
</company>
4

5 回答 5

2

通常在编程中处理 XML 时,您经常希望将其转换为您的程序可以使用的对象。大多数 XML 序列化程序采用元素来表示父元素的属性。

当您像在上面的示例中那样对它们进行分组时,序列化程序可以将其解释为单个集合或数组属性。在这种情况下,您将有一个Company,它有一个Employees属性,它是一个Employee对象的集合。

如果你用第二种方法,你最终会得到一个Company具有名为“ Employee”、“ Employee2”、“ Employee3”或类似的属性的对象。当你在编程时,这不是一个好的对象设计。

于 2009-12-16T19:34:06.260 回答
1

您是否可以将属性或数据附加到组中的所有员工?我通常会选择第一个示例(分组元素),因为它可以让您自由

  1. 创建多个组
  2. 将数据作为一个整体附加到组中

它有点冗长,但可以为您带来更多的灵活性。

于 2009-12-16T19:32:53.517 回答
1

通过特定元素明确表示集合没有语义上的原因。最后,这两个文件具有相同的含义——它们代表一家拥有所有员工和建筑物的公司。

但是,第一个示例提供了额外的好处:

  • 它更具可读性,并且可以从编辑器中的大纲中受益。
  • 您可以创建更严格的架构
  • 序列化为强类型集合更容易
  • 您可以在集合元素上指定适用于内部所有元素的属性

另一方面,第二个例子也有它自己的一些好处(尽管我发现这些至少是可疑的):

  • 不那么健谈/使用更少的内存
  • 通过非 XML 工具更容易处理
于 2009-12-16T19:40:11.613 回答
0

用一个问题来回答你的问题......分组元素如何影响可读性,无论是在视觉上还是在编程上?

分组方法(使用<employees>and <buildings>)更直观。

对于 XPath 查询,非分组方法/company/employees/employee/company/employee.

因此,它可能是一个中的 6 个,另一个可能是六个。

于 2009-12-16T19:34:05.887 回答
0

我会通过考虑您所代表的数据来处理它。

在 C# 中,我看到了这个:

// Top Example:
public class Company
{
  public Employee[] employees;
  public Building[] buildings;
}

// Vs. Bottom Example:
public Things[] employeesAndBuildings;

从逻辑上讲,建筑物和员工不是一回事。由于您的公司有几座建筑物和几名员工,因此您应该在逻辑上将这两组分开。

第二个例子更短,根据读取的格式,读者可以很容易地将这两个项目分开。但是为了可读性,当事情以不同的顺序进行时,格式会变得更加不可读:

<company>
    <employee />
    <building />
    <employee />
    <building />
    <employee />
</company>

我会选择第一种格式。

于 2009-12-16T19:45:46.160 回答