【问题标题】:Is it common for XML tags to be missing the beginning tag?XML 标记缺少开始标记是否很常见?
【发布时间】:2016-02-14 09:09:55
【问题描述】:

我正在使用 python 模块 XMl ElementTree 来解析一堆 XML 文件。通常一个包含文本的标签会写成,

<Tag>some text is here</Tag>

如果没有与我们将拥有的标签相关联的文本,

<Tag></Tag>

但我的一些文件只有,

<Tag/>

这在 XML 中很常见还是我正在查看一个结构不佳的文件?

【问题讨论】:

  • 您看到的标签是 还是 没有 ext 关联?
  • &lt;Tag/&gt; 这样的标签是完全有效的。这只是一个空的自闭合标签。像 &lt;/Tag&gt; 这样的独立标签不是有效的 xml。这将是一个没有相应开始标签的结束标签。如果您看到这种情况,则说明您的文件源有问题 - 它正在生成无效的 xml,您将无法使用任何 xml 处理器对其进行解析。

标签: xml python-3.x elementtree


【解决方案1】:

&lt;tag/&gt; 这样的标签是一个空元素标签(也称为自闭合标签),它是&lt;tag&gt;&lt;/tag&gt; 的简写:都表示一个空元素。

引用自W3C Recommendation on XML

[定义:没有内容的元素称为。]
空元素的表示形式是一个开始标签紧跟一个结束标签,或者是一个空元素标签。
[定义:空元素标签采用特殊形式:]

空元素的标签

[44] EmptyElemTag ::= &lt; 名称(S 属性)* S? /&gt;

空元素标签可用于任何没有内容的元素,无论它是否使用关键字EMPTY 声明。为了互操作性,应该使用空元素标签,并且应该只对声明为 EMPTY 的元素使用空元素标签。

空元素示例:

<IMG align="left"
     src="http://www.w3.org/Icons/WWW/w3c_home" />
<br></br>
<br/>

关于非 XML (HTML) void 元素的一句话

上述内容不应与 HTML 中 void 元素non-XML 概念混淆,后者也可以写成&lt;tag/&gt;

引自W3C HTML Language Reference(我强调了第5点):

void 元素是其内容模型在任何情况下都不允许它拥有内容的元素。

开始标签由以下部分组成,完全按照以下顺序:

  1. &lt; 字符。
  2. 元素的标签名称。
  3. (可选)一个或多个属性,每个属性前面必须有一个或多个空格字符。
  4. (可选)一个或多个空格字符。
  5. (可选)/ 字符,仅当元素为 void 元素时才会出现。
  6. &gt; 字符。

Void 元素只有一个开始标签;不得为 void 元素指定结束标记。

因此,尽管&lt;br/&gt; 可以在非 XML HTML 文档中,但它并不完全代表与 XML 中相同的概念。它不是一个自闭合标签,而是&lt;br&gt;的一个语法替代,一个void元素,它是一个与XML无关的概念。

【讨论】:

    【解决方案2】:

    如果没有结束标记的开始标记,则文档不是有效的 Xml。有一个没有值 &lt;Tag /&gt; 的标签是可以的 - 这相当于 &lt;Tag&gt;&lt;/Tag&gt; 但没有相应的开始标签的结束标签是无效的。元素也必须正确嵌套。

    【讨论】:

      【解决方案3】:

      一个常见的事情是

      ,相当于
      ,在没有内部内容时很有用。 例如,您可以在 html 中看到:
      
      
      

      但是

       单独在标准上下文中无效。
          

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多