【问题标题】:Empty element error with Beautiful SoupBeautiful Soup 出现空元素错误
【发布时间】:2012-03-25 23:26:12
【问题描述】:

我正在使用 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 是等价的?

有什么想法可以解决这个问题吗?

【问题讨论】:

    标签: python xml beautifulsoup


    【解决方案1】:

    锚点和粗体(&lt;a&gt;&lt;b&gt;)元素不能自闭合,因此这是无效的 XHTML。

    除此之外,XHTML spec 表示空格必须引导斜线:

    在空元素的尾随 / 和 > 之前包含一个空格,例如


    和 。此外,对空元素使用最小化的标记语法,例如
    ,作为 XML 允许的替代语法
    ,在许多现有用户代理中会产生不确定的结果。

    【讨论】:

    • ab 的选择是任意的。我正在使用 XML 标签,而不是 (X)HTML。此外,添加空格并没有什么不同。
    • BrT:BeautifulSoup 是一个 (X)HTML 解析器,不是一个 XML 解析器。因此,它只支持有意义的元素的自闭合标签。对于通用 XML 解析,请使用 xml.dom.minidom。我不确定它是否支持自闭合标签,但如果不支持,您可以随时为这些标签进行正则表达式替换。
    • 啊,抱歉,我没有意识到 BeautifulSoup 的这一点——我会看看 minidom。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 2018-10-24
    • 2014-05-31
    相关资源
    最近更新 更多