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

Eclipse XMLエディターは、すべてを選択して再インデントするときにそれを行います(Ctrl + A、Ctrl + I)。Eclipseは完全なIDEであり、軽量のテキストエディターではないため、これは少しやり過ぎですが、必死になっている場合はその解決策です。

XMLエディターでの再インデントは、デフォルトで80文字より長い場合に要素を複数行に分割するなど、他のことを行うことに注意してください。もちろん、これは微調整または無効にすることができます。

于 2012-07-13T23:38:56.163 に答える