2012-07-13 2 views
0

팀의 일원으로 일부 XML 파일을 사용하고 있습니다. 들여 쓰기 설정이 다른 사람들이 있기 때문에 서식이 엉망이되기도하고 자동 도구로 파일을 다시 인쇄하는 것이 편리합니다. 비어있는 줄에있는 개행 문자를 모두 지우지 않고 XML을 멋지게 출력하는 방법이 있습니까? 이것들은 내가 작업하고있는 인간이 읽을 수 있고 편집 된 XML 파일이다 (Ant 스크립트, 설정 파일, 독점 XHTML과 같은 것 등). 이 파일들에있는 개행 문자는 블록으로 텍스트/코드 흐름을 나누는 것이고, 파일을 쉽게 읽을 수있게 만드는 데 정말로 중요합니다.개행을 유지하면서 XML을 정리할 수있는 방법은 무엇입니까?

필자는 텍스트 편집기로 EditPadPro를 사용하고 있으며 외부 도구를 잘 사용할 수 있으며 HTML 형식의 XML을 포맷터로 사용하고 있지만 줄 바꿈을 삭제하는 것은 싫어합니다. 개행 문자를 삭제하지 않고 XML을 올바르게 포맷/예쁜 인쇄 할 수있는 도구는 무엇입니까?

예 짜증나는 XML :

<thing> 
    <frob> 
    </frob> 

    <!-- Done frobbing; now for BAZ. --> 
     <baz /> 
</thing> 

선호 출력 :

<thing> 
    <frob> 
    </frob> 

    <!-- Done frobbing; now for BAZ. --> 
    <baz /> 
</thing> 

답변

1

XML 파서를 사용하여 구문 분석하고 다시 덤프 할 수 있습니다.

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을 실행 여기 파이썬 코드입니다.

1

Eclipse XML 편집기가하는 모든과 reindent합니다 (Ctrl + A, Ctrl 키 + I)를 선택합니다. Eclipse는 완전한 IDE이고 가벼운 텍스트 편집기가 아니기 때문에 조금 지나친 것입니다. 그러나 그 해결책이 절실히 필요하다면 말이죠.

XML 편집기로 다시 들어가는 것은 기본적으로 80 자보다 긴 경우 여러 줄로 요소를 나누는 것과 같은 다른 일을합니다. 물론 이것은 조정할 수도 있고 사용하지 않을 수도 있습니다.

관련 문제