与美丽的汤的空元素错误

时间:2012-03-08 13:24:18

标签: python xml beautifulsoup

我正在使用Beautiful Soup解析xml文件,但在解析空元素时发现了不一致的行为。即。

from BeautifulSoup import BeautifulSoup
s1 = "<c><a /><b /></c>"
s2 = "<c><a></a><b></b></c>"
soup1 = BeautifulSoup(s1)
soup2 = BeautifulSoup(s2)
print soup1
# <c><a><b></b></a></c>
print soup2
# <c><a></a><b></b></c>

请注意,b标记位于第一种情况下的a标记内,但不在第二种情况下。我认为XML规范意味着s1s2是等价的?

有关我如何处理此事的任何想法?

1 个答案:

答案 0 :(得分:1)

锚点和粗体(<a><b>)元素不能自动关闭,因此这是无效的XHTML。

最重要的是,XHTML spec表示空格必须超越斜线:

  

在尾随/和&gt;之前加一个空格空元素,例如&lt; br /&gt ;,&lt; hr /&gt;和&lt; img src =“karen.jpg”alt =“Karen”/&gt;。此外,对空元素使用最小化标记语法,例如&lt; br /&gt;,作为替代语法&lt; br&gt;&lt; / br&gt; XML允许在许多现有的用户代理中提供不确定的结果。