私の知る限りでは、この問題のためにいくつかのソリューションが存在するため、この機能は組み込まれていません。 。
あなたは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
タグクラスでdecode_contentsメソッドに移動し、次の変更を行います。
#s.append(" " * (indent_level - 1))
s.append(" " * (indent_level - Tag.myTab))
今BeautifulSoup( '<ルート> <子> <DESC>テキスト</DESC > < /子供> < /ルート>')(Myタブ= 4)を返します.prettify:
<root>
<child>
<desc>
Text
</desc>
</child>
</root>
**ありませんそれがTagクラスを継承するので、BeautifulSoupクラスにパッチを当てる必要があります。パッチタグクラスは、目標を達成するのに十分です。
HTMLとXMLは非常に深く入れ子になっている傾向があります。私は、80列ウィンドウのようなCrummyの人たちを推測しています。しかし、この機能を要求するバグをメーリングリスト/グループやファイルに投稿したいかもしれません(そして、パッチはかなりシンプルです。そして、ramabodhiはすでにあなたのためにそれを書いています。あなたの電子メール/バグ報告する)。 – abarnert
数年前に誰かが3.2と似たパッチをメーリングリストに投稿したようです。 [こちら](https://groups.google.com/forum/?fromgroups=#!topic/beautifulsoup/B4qryJpJqPY)をご覧ください。 – abarnert
"1スペースの字下げは単なる愚かなようです:|" - ありがとうございました。これはまさに私がこの問題を探しているときに考えていたものです。 – Brandin