2010-02-06 33 views
4

使用BeautifulSoup解析我的XMLselfClosingTags在BeautifulSoup

import BeautifulSoup 

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

print soup.prettify() 

這將輸出:

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

即安妮標籤是標籤艾倫的孩子。

如果我通過selfClosingTags = [ '阿倫']當我創建了湯,我得到:

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

太好了!

我的問題:爲什麼/>的存在不能用於指示自動關閉標籤?

回答

3

您所問的是作者的心靈,已經指出,他給喜歡漂亮的[石]名湯的類/模塊:-)

這裏還有兩個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> 
>>> 

我的看法:如果沒有定義解析器自動關閉的標籤是不合法的。 (1)假定/是一個錯誤(2)將alan作爲一個自動關閉標籤,完全獨立於它可能在其他地方使用的方式。輸入(3)使第一遍中的輸入在兩個標籤之間傳遞。你更喜歡哪個選擇?

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呈現爲開始和結束標記。