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の動作の例をさらに2つ示します。

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

私の見解:パーサーに定義されていない場合、自己終了タグは合法ではありません。したがって、作成者は、次のような違法なフラグメントを処理する方法を決定する際に選択肢がありました...(1)間違い<alan x="y" /> であると想定します(2)入力の他の場所でどのように使用されるかとはまったく関係なく自己終了タグとして扱います(3 )各タグがどのように使用されたかを最初のパスで入力ナットに2回パスします。どちらを選びますか?/alan

于 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 に答える