BeautifulSoup中的selfClosingTags


问题内容

使用BeautifulSoup解析我的XML

import BeautifulSoup

soup = BeautifulSoup.BeautifulStoneSoup( """<alan x="y" /><anne>hello</anne>""" ) # selfClosingTags=['alan'])

print soup.prettify()

这将输出:

<alan x="y">
 <anne>
  hello
 </anne>
</alan>

即,anne标签是alan标签的子元素。

如果在创建汤时传递selfClosingTags = [‘alan’],我将得到:

<alan x="y" />
<anne>
 hello
</anne>

大!

我的问题:为什么不能使用的存在/>来指示自闭标签?


问题答案:

您注意到了作者给类/模块赋予了Beautiful [Stone] Soup之类的名字之后,您在问作者在想什么:-)

这是BeautifulStoneSoup的行为的另外两个示例:

>>> soup = BeautifulSoup.BeautifulStoneSoup(
    """<alan x="y" ><anne>hello</anne>"""
    )
>>> print soup.prettify()
<alan x="y">
 <anne>
  hello
 </anne>
</alan>

>>> soup = BeautifulSoup.BeautifulStoneSoup(
    """<alan x="y" ><anne>hello</anne>""",
    selfClosingTags=['alan'])
>>> print soup.prettify()
<alan x="y" />
<anne>
 hello
</anne>
>>>

我的看法:如果未为解析器定义自动关闭标签,则该标签不合法。因此,在决定如何处理诸如<alan x="y" />
…的非法片段时,作者可以选择…(1)假设s/是一个错误(2)alan视为自动关闭标签,而与在输入中其他地方如何使用无关(3
)在输入过程中进行2遍输入,并在第一遍中说明如何使用每个标签。您更喜欢哪个选择?