我正在使用一些XML文件作为团队的一部分。由于某些人有不同的缩进设置,格式有时会搞砸,并且让自动化工具重新打印文件很方便。有没有办法漂亮地打印XML,而不删除空行中的所有换行符?这些是我正在使用的人类可读/编辑的XML文件(Ant脚本,配置文件,类似XHTML的专有内容等)。这些文件中的换行符是将文本/代码流分解为块,对于使文件易于阅读非常重要。
我正在使用EditPadPro作为我的文本编辑器(它可以使用外部工具)和HTML Tidy作为我的XML格式化程序,但我不喜欢它删除换行符。我可以使用什么工具来正确格式化/漂亮打印XML,而不删除换行符?
恼人的XML示例:
<thing>
<frob>
</frob>
<!-- Done frobbing; now for BAZ. -->
<baz />
</thing>
首选输出:
<thing>
<frob>
</frob>
<!-- Done frobbing; now for BAZ. -->
<baz />
</thing>
答案 0 :(得分:1)
Eclipse当您选择all和reindent(Ctrl + A,Ctrl + I)时,XML编辑器就会这样做。 这有点矫枉过正,因为Eclipse是一个完整的IDE,而不是一个轻量级的文本编辑器,但是如果你绝望的是它的解决方案。
请注意,使用XML编辑器重新定义会执行其他操作,例如,如果默认情况下长度超过80个字符,则会拆分多行上的元素,这当然可以调整或禁用。
答案 1 :(得分:1)
您可以使用XML解析器对其进行解析并再次转储它。这是Python中的代码:
from xml.parsers.expat import ParserCreate
class process:
def __init__(self):
self.level = 0
def start_element(self, name, attrs):
attr = ''
for i, j in attrs.iteritems():
attr += ' {0}="{1}"'.format(i, j)
print '{0}<{1}{2}>'.format(' '*self.level, name, attr)
self.level += 1
def end_element(self, name):
self.level -= 1
print '{0}</{1}>'.format(' '*self.level, name)
def char_data(self, data):
data = data.strip()
if data:
print ' '*self.level+data
if __name__ == '__main__':
import sys
for f in sys.argv[1:]:
p = ParserCreate()
q = process()
p.StartElementHandler = q.start_element
p.EndElementHandler = q.end_element
p.CharacterDataHandler = q.char_data
p.ParseFile(open(f))
将其另存为xml_prettifier.py
并运行python xml_prettifier.py <file>.xml
。