2012-03-08 16 views
2

Beautiful Soupを使用してxmlファイルを解析していますが、空の要素を解析するときに一貫性のない動作が検出されました。私。Beautiful Soupで空要素エラーが発生しました

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

要素のアンカーと太字(<a>,)は自己クローズではないため、無効なXHTMLです。その上で

XHTML specはスペースがスラッシュをリードしなければならないと言う:

例えば、末尾の前に/と>空要素のスペースを含めます< br />、< hr />および< img src = "karen.jpg" alt = "Karen" />。また、空の要素には最小化されたタグ構文を使用します(例: < br />を代替構文として使用すると、XMLによって許可される< br> </br>は、多くの既存のユーザーエージェントで不確実な結果をもたらします。

+0

「a」と「b」の選択は任意です。私は(X)HTMLではなく、XMLタグで作業しています。また、スペースを追加しても差はありません。 – BrT

+1

BrT:BeautifulSoupは、(X)HTMLパーサーであり、XMLパーサーではありません。このため、意味を成す要素には自己閉じタグのみがサポートされています。一般的なXML解析では、__ ['xml.dom.minidom'](http://docs.python.org/library/xml.dom.minidom.html#module-xml.dom.minidom)__を使用します。私はそれが自己終了タグをサポートしているかどうかはわかりませんが、もしそうでなければ、それらの正規表現をいつでも置き換えることができます。 – orlp

+0

ああ、申し訳ありませんが、私はBeautifulSoupについてそれを認識しませんでした - 私はミニドームを見ます。ありがとう! – BrT

関連する問題