1

没有空元素自我关闭的xml可以形成良好的格式吗?

像这样的任何东西:

<team>Chicago Bulls<playerA/>23<playerB/>43</team>

代替:

<team>Chicago Bulls<playerA>23</playerA><playerB>43</playerB></team>

它会形成良好的形式吗?我可以在哪里读到它?主要来自 w3c。

提前致谢

4

2 回答 2

2

是的,您的两个示例都是格式良好的,但是在球员编号之前加上一个player元素而不是将其放在player元素的内容中将是一个非常糟糕的设计决策,因为它无法利用 XML 工具和开发人员会期望。

你可以阅读更多关于良构的信息,

但不要期望看到您的观点得到明确解决,因为您的问题与其说是关于格式正确,不如说是关于设计。


历史记录

XML 的前身 SGML 有一个省略结束标记的概念,这可能与您提出问题的动机有关。而不是在第一个示例中使用自闭合标签(要清楚,它会产生空元素),

<team>Chicago Bulls<playerA/>23<playerB/>43</team>

和元素可以定义为具有省略的结束标签,允许以下标记playerAplayerB

<team>Chicago Bulls<playerA>23<playerB>43</team>

您的自闭合player元素已被替换为带有省略结束标签的开放标签。这不是格式良好的 XML。

于 2021-11-08T17:50:33.120 回答
1

您显示的 XML 格式正确,但没有“非空自闭合元素”。如果我们添加一些空格,我们可以显示节点之间的关系:

<team>
   Chicago Bulls
   <playerA/>
   23
   <playerB/>
   43
</team>

因此,该team元素有 5 个子节点:

  1. 包含“芝加哥公牛队”的文本节点
  2. playerA一个没有属性或内容的元素调用
  3. 包含“23”的文本节点
  4. playerB一个没有属性或内容的元素调用
  5. 包含“43”的文本节点

除了它们的顺序之外,没有表示这些节点之间的任何关系——特别是,文本“23”与任何一个自闭合元素都不相关。


另一种表明这一点的方法是记住这<foo/>只是一种不同的写作方式 <foo></foo>,所以我们也可以这样写:

<team>Chicago Bulls<playerA></playerA>23<playerB></playerB>43</team>

相反,在第二个示例中系统地添加空格将如下所示:

<team>
    Chicago Bulls
    <playerA>
        23
    </playerA>
    <playerB>
       43
    </playerB>
</team>

在这种情况下,teams元素只有三个直接子元素:

  1. 包含“芝加哥公牛队”的文本节点
  2. 一个名为 的元素playerA,其中包含一个包含“23”的文本节点
  3. 一个名为 的元素playerB,其中包含一个包含“43”的文本节点
于 2021-11-08T17:53:11.467 回答