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

时间:2015-03-16 16:35:55

标签: xml

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

来自W3Schools的信息:

  

&#34;空XML元素没有内容的元素被认为是空的。在   XML,你可以指出一个像这样的空元素:<element></element>   或者你可以像这样使用一个空标签(这种元素语法是   称为自我关闭):<element />上面两种形式产生   XML解析器中的结果相同。&#34;

3 个答案:

答案 0 :(得分:5)

如果架构要求标签按特定顺序出现,则即使它具有空值,您也可能需要包含该标签。例如,架构中的以下片段表示您需要在标记栏之前标记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>

所以以下片段是有效的:

<parent>
  <foo />
  <bar>asdf!</bar>
</parent>

但以下不会:

<parent>
  <bar>asdf!</bar>
</parent>

此外,您可以使用空标记来表示空值(而不是空值)。但是,如果您尝试在XML中表示空值,则应该使用xsi:nil属性

答案 1 :(得分:3)

根据我的经验,我在使用API​​时遇到过很多这些格式。有时,API创建者具有空的变量,从而导致这些空XML标记。例如,假设您正在创建一个网站,可以收集不同酒店的酒店可用性。 A公司(某酒店公司)为您提供API访问权限。您发送请求并向他们提供以下内容:

<response>
  <date>2008-01-10</date>
  <available>TRUE</available>
</response>

但有时你可能会得到:

<response>
  <date>2008-01-10</date>
  <available>FALSE</available>
</response>

或者有时你会得到:

<response>
  <date>2008-01-10</date>
  <available></available>
</response>

作为开发人员,您必须创建可用于任何类型响应的代码,因为我们不确切知道数据是如何从API创建者发回的,这就是教程中提到的原因。希望这会有所帮助。

答案 2 :(得分:0)

我认为你正在使用&#34;空&#34;元素是指没有任何孩子的元素。&#34;自闭元素 - 没有单独的结束标记 - 可能仍然具有属性,并且在这个意义上不是空的。

(X)HTML本身定义&#34;空&#34;元素,例如<br/>。同样,即使<br/>可能还有class和其他属性。

关于如何在自己的模式中使用它们的问题,您可以使用空XML元素作为&#34;标记&#34; (借用.NET使用术语&#34;标记接口&#34;对于没有成员的接口)。当你想要添加一个&#34; boolean&#34;属性为元素(如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>

也就是说,解决可能被视为XML缺陷的问题, viz ,无法表示非文本原语。