0

作为团队的一部分,我正在处理一些 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>
4

2 回答 2

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.

于 2012-07-14T01:50:00.807 回答
1

当您全选并重新缩进(Ctrl+A、Ctrl+I)时,Eclipse XML 编辑器会执行此操作。这有点矫枉过正,因为 Eclipse 是一个完整的 IDE,而不是一个轻量级的文本编辑器,但如果你不顾一切,它是一个解决方案。

请注意,使用 XML 编辑器重新缩进会执行其他操作,例如在默认情况下将超过 80 个字符的元素拆分为多行,这当然可以进行调整或禁用。

于 2012-07-13T23:38:56.163 回答