如何处理空XML元素?

时间:2011-03-22 07:41:22

标签: xml xsd

我不熟悉XML,所以也许你能帮助我: - )

假设我们有一个非常简单的XML文档,如下所示:

<person>
  <firstname>John</firstname>
  <middlename/>
  <familyname>Doe</familyname>
</person>

所以,显然John Doe没有中间名。在xsd文件中,此元素定义为可选,minOccurs = 0。

是否有任何规则,标准,最佳实践或任何定义如何处理此空元素的内容?如果为元素定义了minOccurs = 0,是否应将其删除?在我看来,空元素没有用,除非属性与该元素一起使用。

谢谢, 罗伯特

3 个答案:

答案 0 :(得分:2)

以下是XHTML文档片段的示例:

<p>The quick brown fox<br />jumped over the lazy dog</p>

有一个没有属性的空元素,但删除它会改变文档的结构。

您无法将空元素删除为通用流程。您必须根据具体情况做出决定。在你的例子中,删除它似乎是合理的(实际上,首先把它放在一边似乎有些不合理,因为它似乎说有一个中间名,但它没有数据)。

答案 1 :(得分:1)

好吧,我会说这是一个定义问题。如果您想强调一个人是否有中间名,请在您的XML代码段中执行此操作,其中minOccursmaxOccurs设置为1(或者不同;也许您想要建模有多个中间名的人?)。否则,请将minOccurs设置为0,以便将其保留。

正如David所示,拥有一个空元素并不一定要没有那个元素。这是一个如何定义语义的问题。

答案 2 :(得分:1)

如果您知道此人没有中间名,有人会说您应该使用空元素,如果您不知道他们是否有中间名,您应该省略该元素。但对于大多数应用来说,这是一个相当精细的区别做出自己的选择。实际上有第三个选项,即使用xsi:nil="true",但我永远不会理解为什么有人会想要使用它。

当然要记住,当你将个人姓名建模为(第一,中间,最后)时,你就会将数据强制拟合到一个与世界上使用的真实人物名称不相符的结构中,即使你只对住在美国的人感兴趣。