据我所知,这个功能不是内置的,因为有一些解决方案可以解决这个问题。
假设您使用的是 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
先前解决方案的另一个问题是文本内容不会完全一致地缩进,但仍然很吸引人。如果您需要更灵活/一致的解决方案,您只需修改类即可。
找到 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>
**无需修补 BeautifulSoup 类,因为它继承了 Tag 类。修补 Tag 类足以实现目标。