私の知る限り、この問題にはいくつかの解決策があるため、この機能は組み込まれていません。
あなたがBeautifulSoup4を使用していると仮定して、これが私が思いついた解決策です
ハードコーディングします。これには最小限の変更が必要です。さまざまな状況でインデントを変える必要がない場合は、これで問題ありません。
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
以前のソリューションのもう1つの問題は、テキストコンテンツが完全に一貫してインデントされないことですが、それでも魅力的です。より柔軟で一貫性のあるソリューションが必要な場合は、クラスを変更するだけです。
prettify関数を見つけて、そのように変更します(element.pyのTagクラスにあります)。
#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)
次に、Tagクラスのdecodeメソッドまで上にスクロールして、次の変更を加えます。
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('<root> <child> <desc> Text </ desc> </ child> </ root>')。prettify(myTab = 4)は次を返します。
<root>
<child>
<desc>
Text
</desc>
</child>
</root>
** Tagクラスを継承するため、BeautifulSoupクラスにパッチを適用する必要はありません。タグクラスにパッチを適用することで、目標を達成するのに十分です。