4

使用 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>

伟大的!

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

4

2 回答 2

3

你在问作者的想法,在注意到他给类/模块取了 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) 假设这/是一个错误 (2) 将alan其视为一个自闭合标签,完全独立于它在输入中其他地方的使用方式 (3 ) 对输入进行 2 次遍历,在第一遍中详细说明每个标签的使用方式。你更喜欢哪个选择?

于 2010-02-06T01:57:54.243 回答
1

我没有“为什么”,但这可能会引起您的兴趣。如果您使用BeautifulSoup(不使用 Stone)来解析带有自闭合标签的 XML,它就可以工作。有点:

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

嵌套是正确的,即使alan呈现为开始和结束标记。

于 2010-02-06T01:57:36.753 回答