2012-03-08 96 views
2

我解析一個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是等同的?

有什麼想法可以解決這個問題?

回答

1

錨點和粗體(<a>,<b>)元素不能自行關閉,所以這是無效的XHTML。

最重要的是,所述XHTML spec說的空間必須導致斜線:

包括結尾之前的空間和/>空元素,例如的<,< hr />和< img src =「karen.jpg」alt =「Karen」/>。另外,對空元素使用最小化標記語法,例如,作爲備選語法< br> </br>由XML允許在許多現有的用戶代理中給出不確定的結果。

+0

「a」和「b」的選擇是任意的。我正在使用XML標記,而不是(X)HTML。另外,增加空間並沒有什麼不同。 – BrT 2012-03-08 13:43:59

+1

BrT:BeautifulSoup是一個(X)HTML解析器,__not__是一個XML解析器。正因爲如此,它只支持有意義的元素的自閉標籤。對於通用XML解析,請使用__ ['xml.dom.minidom'](http://docs.python.org/library/xml.dom.minidom.html#module-xml.dom.minidom)__。我不確定它是否支持自閉標籤,但如果不支持,您可以隨時替換爲正則表達式。 – orlp 2012-03-08 13:55:24

+0

啊,對不起,我沒有意識到關於BeautifulSoup - 我會看看minidom。謝謝! – BrT 2012-03-08 14:44:08