为什么在XML中使用空元素?

Ste*_* T. 7 xml

在这里排名业余.我得到如何在XML中使用空元素的说明.但你为什么要这样?除了(我猜)在解析XML时添加空白记录,它会用于什么?

以下是W3Schools的信息:

"空XML元素没有内容的元素被认为是空的.在XML中,你可以指示一个这样的空元素:<element></element> 或者你可以使用一个空标记,就像这样(这种元素语法称为自闭合):<element />上面的两种形式在XML解析器中产生相同的结果."

Dan*_*eld 6

如果架构要求标签以特定顺序出现,则即使该标签具有空值,也可能需要包括该标签。例如,以下来自架构的片段指示您在标签栏之前需要标签foo:

<xs:element name="parent">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="foo" minOccurs="1" maxOccurs="1" />
      <xs:element name="bar" minOccurs="1" maxOccurs="1" />
    </xs:sequence>
  </xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)

因此以下片段将是有效的:

<parent>
  <foo />
  <bar>asdf!</bar>
</parent>
Run Code Online (Sandbox Code Playgroud)

但是以下内容不会:

<parent>
  <bar>asdf!</bar>
</parent>
Run Code Online (Sandbox Code Playgroud)

此外,您可以使用空标记表示空值(与空值相对)。但是,如果您尝试用XML表示空值,则应该使用一个xsi:nil属性


har*_*rpo 3

我认为您使用“空”元素来表示“没有任何类型子元素的元素”。自闭合元素(没有单独的结束标记的元素)可能仍然具有属性,并且在这个意义上不是空的。

(X)HTML 本身定义了“空”元素,例如<br/>. 同样,甚至<br/>可能具有class其他属性。

对于如何在您自己的模式中使用它们的问题,您可以使用空 XML 元素作为“标记”(借用 .NET 使用术语“标记接口”来表示没有成员的接口的方式)。当您想要向元素添加“布尔”属性时(例如 HTML 允许无值属性,例如checked),这非常有用。在这种情况下,使用属性会迫使您添加某种噪音(以无意义或空值的形式)。

例如,我用这种方式将莎士比亚戏剧中的演讲标记为散文:

<speech>
    <speaker role="Archidamus">Archidamus</speaker>
    <prose/>
    <line a="If_you">If you shall chance, Camillo, to visit Bohemia, on</line>
    <line a="the_like">the like occasion whereon my services are now on</line>
    <line a="foot_you">foot, you shall see, as I have said, great</line>
    <line a="difference_betwixt">difference betwixt our Bohemia and your Sicilia.</line>
</speech>
Run Code Online (Sandbox Code Playgroud)

也就是说,解决 XML 的缺陷(即无法表示非文本原语)有点拼凑。