據我所知,這個功能不是內置的,因爲這個問題有一些解決方案。 。
假設你正在使用BeautifulSoup 4,這裏是我想出了
硬編碼的解決方案,這需要最少的變化,如果你不需要縮進到在不同的環境不同,這是好的:
myTab = 4 # add this
if pretty_print:
# space = (' ' * (indent_level - 1))
space = (' ' * (indent_level - myTab))
#indent_contents = indent_level + 1
indent_contents = indent_level + myTab
以前的解決方案的另一個問題是,文本內容不會被完全一致地縮進,而是有吸引力的,仍然。如果您需要更靈活/一致的解決方案,您可以修改該類。
找到美化功能,並修改它本身(它位於element.py標籤類):
#Add the myTab keyword to the functions parameters (or whatever you want to call it), set it to your preferred default.
def prettify(self, encoding=None, formatter="minimal", myTab=2):
Tag.myTab= myTab # add a reference to it in the Tag class
if encoding is None:
return self.decode(True, formatter=formatter)
else:
return self.encode(encoding, True, formatter=formatter)
然後向上滾動的標籤類的解碼方法,並進行以下變化:
if pretty_print:
#space = (' ' * (indent_level - 1))
space = (' ' * (indent_level - Tag.myTab))
#indent_contents = indent_level + Tag.myTab
indent_contents = indent_level + Tag.myTab
然後去在Tag類的decode_contents方法,使這些變化:
#s.append(" " * (indent_level - 1))
s.append(" " * (indent_level - Tag.myTab))
現在BeautifulSoup( '<根> <孩子> <遞減>文本< /遞減> < /兒童> < /根>').prettify(MYTAB = 4)將返回:
<root>
<child>
<desc>
Text
</desc>
</child>
</root>
**無需要修補BeautifulSoup類,因爲它繼承了Tag類。修補標記類足以實現目標。
爲了回答你的問題(「WHY!」):HTML和XML往往嵌套得非常非常深,我猜測像80列窗口這樣的Crummy傢伙。但是你可能想要發佈到郵件列表/組和/或提交一個請求這個功能的bug(並且,因爲這個補丁非常簡單,而且ramabodhi已經爲你寫了很多東西),你應該將它包含在你的電子郵件/ bug中報告)。 – abarnert 2013-03-20 01:20:14
幾年前,它似乎有人在3.2版本的郵件列表中提交了類似的補丁。請參閱[這裏](https://groups.google.com/forum/?fromgroups=#!topic/beautifulsoup/B4qryJpJqpY)。 – abarnert 2013-03-20 01:37:55
「1格縮進看起來簡直愚蠢。」| |「 - 謝謝。這正是我在尋找這個問題時的想法。 – Brandin 2015-08-24 18:37:16