XML 보기 좋게 정렬하는 방법
한 줄로 붙어 있는 XML을 입력 칸에 붙여 넣으면 결과 칸에 요소마다 줄을 바꾸고 들여쓴 XML이 나옵니다.
- XML을 붙여 넣거나 파일을 엽니다. 사이트맵, RSS, SVG, Maven
pom.xml, 안드로이드 레이아웃, SOAP 응답, 공공데이터 API 응답 모두 열 수 있습니다. - 들여쓰기를 2칸·4칸·탭 중에서 고르고, 속성을 한 줄에 하나씩 둘지, 주석을 지울지 정합니다.
- 형식이 틀린 문서라면 상태 줄에 첫 오류가 몇 번째 줄 몇 번째 칸인지 나오고, 입력 칸의 그 줄에 표시가 생깁니다.
- 트리로 바꾸면 요소를 접었다 펼 수 있습니다. 결과는 복사하거나
.xml파일로 내려받습니다.
XML 오류 검사: 자주 나오는 오류와 해결
오류 문구는 브라우저의 XML 파서가 내는 영어 원문 그대로 보여 줍니다. 자주 보는 문구와 고치는 법은 다음과 같습니다.
| 오류 문구 | 원인 | 해결 |
|---|---|---|
| Opening and ending tag mismatch | 태그를 닫는 순서가 틀렸거나 이름에 오타가 있음 | 가장 안쪽 요소부터 닫습니다. 이름은 대소문자를 구분합니다 |
| EntityRef: expecting ';' | 텍스트에 &를 그대로 씀(URL에서 흔함) | &로 씁니다 |
| StartTag: invalid element name | 텍스트에 <를 그대로 씀 | <로 쓰거나 CDATA로 감쌉니다 |
| Extra content at the end of the document | 루트 요소가 둘 이상 | 전체를 루트 요소 하나로 감쌉니다 |
| Attribute redefined | 한 요소에 같은 속성이 두 번 | 하나만 남깁니다 |
| AttValue: " or ' expected | 속성 값을 따옴표로 감싸지 않음 | id="7"처럼 감쌉니다 |
Maven pom.xml 오류처럼 IDE가 빨간 줄을 그었는데 이유가 잘 안 보일 때도 파일 내용을 붙여 넣으면 형식 오류인지 먼저 가릴 수 있습니다. 형식에 문제가 없다면 의존성 버전이나 스키마 쪽 문제입니다.
형식이 맞는 XML과 유효한 XML의 차이
XML 1.0 명세(5판, 2008년 11월 26일 W3C 권고안)는 두 단계를 나눕니다. 문법 제약을 지킨 문서는 형식이 맞는(well-formed) 문서이고, XML 파서는 형식이 틀린 문서를 거부해야 합니다. 형식이 맞으면서 DTD나 XSD 같은 스키마까지 지키면 유효한(valid) 문서입니다. 실제로 파일이 깨지는 경우는 대부분 앞 단계라서 이 도구는 형식을 검사합니다.
미리 정의된 엔티티는 <(<), >(>), &(&), '('), "(") 다섯 개입니다(명세 4.6절).
XML 정렬 단축키: VS Code·Notepad++·IntelliJ·이클립스
| 편집기 | 정렬 방법 |
|---|---|
| VS Code | Red Hat의 XML 같은 XML 확장을 설치한 뒤 문서 서식: Windows Shift+Alt+F, macOS Shift+Option+F, Linux Ctrl+Shift+I |
| Notepad++ | 플러그인 > 플러그인 관리에서 XML Tools를 설치하고 플러그인 > XML Tools > Pretty print |
| IntelliJ IDEA | Reformat Code: Windows·Linux Ctrl+Alt+L |
| 이클립스 | Source > Format (Ctrl+Shift+F) |
크롬에서 XML 파일 열기와 세금계산서 XML 보기
크롬이나 엣지 창에 .xml 파일을 끌어다 놓으면 태그 구조를 그대로 보여 주지만, 줄이 길거나 오류가 있으면 읽기 어렵습니다. 이 페이지에서 파일을 열면 정렬된 코드와 접을 수 있는 트리로 볼 수 있고, 오류가 있으면 위치를 알려 줍니다. 전자세금계산서 XML 파일도 열어 태그와 값을 확인할 수 있습니다. 다만 세금계산서 양식 모양으로 보여 주지는 않습니다.
명령줄과 파이썬으로 XML 정렬
리눅스와 macOS에서는 libxml2의 xmllint로 정렬하고 오류를 확인합니다.
xmllint --format input.xml > pretty.xml
파이썬 3.9 이상에서는 표준 라이브러리만으로 들여쓸 수 있습니다.
import xml.etree.ElementTree as ET
tree = ET.parse("input.xml")
ET.indent(tree, space=" ")
tree.write("pretty.xml", encoding="utf-8", xml_declaration=True)
XML 압축
압축(Minify)은 요소 사이의 공백만 있는 텍스트를 지우고 태그 안의 공백을 정리해 한 줄로 만듭니다. API로 보내는 데이터나 설정 파일 크기를 줄일 때 씁니다. 텍스트 내용과 CDATA는 그대로 두고, 주석은 삭제를 고를 때만 지웁니다.
출처: W3C Extensible Markup Language (XML) 1.0 (Fifth Edition) 2.1·2.8·2.10·4.6절, 파이썬 문서 xml.etree.ElementTree.indent(3.9부터), libxml2 xmllint 매뉴얼, JetBrains Reformat code. 2026년 10월 확인.