<blockquote>
<p>Can this easily be done?</p>
</blockquote>
<p>这取决于你想要什么样的规则,但一般来说,你对漂亮的印刷品几乎没有控制权。如果你想要一个特定的格式,你通常必须写自己的沃克。</p>
<p><a href="http://www.doxdesk.com/software/py/pxdom.html" rel="noreferrer">pxdom</a>中的DOM级别3ls参数格式pretty print非常接近您的示例。它的规则是,如果一个元素只包含一个TextNode,则不会添加额外的空白。但是它(当前)使用两个空格来缩进,而不是四个空格。</p>
<pre><code>>>> doc= pxdom.parseString('<a><b>c</b></a>')
>>> doc.domConfig.setParameter('format-pretty-print', True)
>>> print doc.pxdomContent
<?xml version="1.0" encoding="utf-16"?>
<a>
<b>c</b>
</a>
</code></pre>
<p>(调整编码和输出格式以适应正在进行的任何类型的序列化。)</p>
<p>如果这是您想要的规则,并且您可以摆脱它,那么您还可以对minidom的Element.writexml进行monkey修补,例如:</p>
<pre><code>>>> from xml.dom import minidom
>>> def newwritexml(self, writer, indent= '', addindent= '', newl= ''):
... if len(self.childNodes)==1 and self.firstChild.nodeType==3:
... writer.write(indent)
... self.oldwritexml(writer) # cancel extra whitespace
... writer.write(newl)
... else:
... self.oldwritexml(writer, indent, addindent, newl)
...
>>> minidom.Element.oldwritexml= minidom.Element.writexml
>>> minidom.Element.writexml= newwritexml
</code></pre>
<p>所有关于猴子补伤的常见警告都适用。</p>