【问题标题】:How shall empty XML elements be handled?如何处理空 XML 元素?
【发布时间】:2011-03-22 07:41:21
【问题描述】:

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

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

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

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

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

谢谢, 罗伯特

【问题讨论】:

    标签: xml xsd


    【解决方案1】:

    这是一个 XHTML 文档片段的示例:

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

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

    您不能将空元素作为通用过程删除。您必须根据具体情况做出决定。在您的示例中,删除它似乎是合理的(实际上,首先使用它似乎有点不合理,因为它似乎是在说有一个中间名,但其中没有数据)。

    【讨论】:

      【解决方案2】:

      嗯,我想说这是一个定义问题。如果你想强调一个人是否有中间名,就像在你的 XML sn-p 中一样,将 minOccursmaxOccurs 设置为 1 (或不同;也许你想为具有超过一个中间名?)。否则将minOccurs 设置为0 以允许忽略它。

      正如 David 所展示的那样,拥有一个空元素并不一定与根本没有该元素相同。这是一个如何定义语义的问题。

      【讨论】:

        【解决方案3】:

        有些人会说如果你知道这个人没有中间名,你应该使用一个空元素,如果你不知道他们是否有中间名,你应该省略这个元素。但对于大多数应用程序来说,这是一个相当不错的区别。做出你自己的选择。其实还有第三种选择,那就是使用xsi:nil="true",但我一直不明白为什么有人要使用它。

        当然请记住,当您将个人姓名建模为(名字、中间、姓氏)时,您将数据强制拟合到与世界上使用的真实个人姓名种类不匹配的结构中,即使您'只对居住在美国的人感兴趣。

        【讨论】:

        • 迈克尔,非常感谢您的提示。是的,我知道这个名称问题。我原来的帖子只是一个例子:-)
        猜你喜欢
        • 2017-05-26
        • 1970-01-01
        • 1970-01-01
        • 2014-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-05
        相关资源
        最近更新 更多