我使用python模块XMl ElementTree来解析一堆XML文件。通常,包含文本的标签将被写为
<Tag>some text is here</Tag>
如果没有与我们将拥有的标签相关联的文字,
<Tag></Tag>
但我的部分文件只有,
<Tag/>
这在XML中是常见的还是我在查看构造不良的文件?
答案 0 :(得分:4)
像curl -vs 'https://some-site.com' 1> /dev/null
这样的标签是空元素标签(也称为自动关闭标签),它是<tag/>
的简写:两者都代表一个空元素。
[定义:没有内容的元素被称为空。] 空元素的表示形式可以是紧跟在结束标记之后的开始标记,也可以是空元素标记 [定义:空元素标记采用特殊形式:]
空元素的标记
[44] EmptyElemTag :: =
<tag></tag>
名称(S属性)* S?<
空元素标签可用于任何没有内容的元素,无论是否使用关键字
/>
声明。对于互操作性,对于声明为EMPTY
的元素,应使用空元素标记1,并且只应使用它。空元素的例子:
EMPTY
上述内容不应与HTML中 void elements 的非XML 概念混淆,后者也可以像<IMG align="left"
src="http://www.w3.org/Icons/WWW/w3c_home" />
<br></br>
<br/>
一样编写。
引自W3C HTML Language Reference(我强调第5点):
void元素是一个元素,其内容模型在任何情况下都不允许它拥有内容。
开始标记由以下部分组成,完全按以下顺序排列:
- 一个
<tag/>
字符。- 元素的标记名称。
- (可选)一个或多个属性,每个属性必须以一个或多个空格字符开头。
- (可选)一个或多个空格字符。
- (可选)
<
字符,仅当元素为void元素时才会出现。- 一个
醇>/
字符。Void元素只有一个开始标记;不得为void元素指定结束标记。
因此,尽管在非XML HTML文档中可以有>
,但它并不完全代表与XML相同的概念。它不是自动关闭标记,而是<br/>
的语法替代, void 元素,它是XML的外来概念。
答案 1 :(得分:3)
如果结束标记没有开始标记,则该文档不是有效的Xml。没有值<Tag />
的标记也可以 - 这相当于<Tag></Tag>
但是没有相应的开始标记的结束标记是无效的。元素也必须正确嵌套。
答案 2 :(得分:3)
常见的是
<tag/>,相当于
<tag></tag>,在没有内容时很有用。 例如,您可以在html中看到:
<img src="foo.png"/>
但
</tag>单独在标准上下文中无效。