XML 포매터가 하는 일
XML은 구조화된 데이터를 중첩된 태그로 저장합니다. RSS 피드, 사이트맵, SOAP API, 안드로이드 레이아웃, Maven pom.xml 파일, Office 문서, 그리고 수많은 데이터 내보내기 파일에 쓰입니다. 기계가 만든 XML은 긴 한 줄인 경우가 많습니다. 이 XML 포매터는 요소를 한 줄에 하나씩, 일관된 들여쓰기로 정렬해 중첩 구조를 쉽게 따라갈 수 있게 합니다.
작업은 세 가지입니다.
- 포맷: XML을 들여쓰기해 정렬합니다.
- 압축(Minify): 태그 사이의 공백을 지워 파일을 작게 만듭니다.
- 검사: 문서가 올바른 형식인지 확인하고 첫 번째 문제를 알려 줍니다.
사용 방법
- 왼쪽 상자에 XML을 붙여넣거나, 파일 열기 또는 예시를 누릅니다. 붙여넣은 XML은 바로 정렬됩니다.
- 들여쓰기를 공백 2칸, 공백 4칸, 탭 중에서 고릅니다.
- 포맷, 압축(Minify), 검사 중 하나를 누릅니다. Ctrl+Enter는 마지막 작업을 다시 실행합니다.
- 복사를 누르거나, 다운로드를 눌러 결과를
.xml파일로 저장합니다.
정렬 전과 후
한 줄로 된 상품 카탈로그입니다.
<?xml version="1.0" encoding="UTF-8"?><catalog><book id="bk101"><author>Gambardella, Matthew</author><title>XML Developer's Guide</title><price>44.95</price></book><book id="bk102"><author>Ralls, Kim</author><title>Midnight Rain</title><price>5.95</price></book></catalog>
공백 2칸으로 포맷한 결과입니다.
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<price>44.95</price>
</book>
<book id="bk102">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<price>5.95</price>
</book>
</catalog>
텍스트 내용은 요소와 같은 줄에 남습니다. 이 점이 중요한 이유는 <price>44.95</price> 안에 줄바꿈을 넣으면 프로그램이 읽는 값이 달라지기 때문입니다.
압축(Minify) 버튼은 정렬된 버전을 위의 한 줄짜리로 되돌립니다. 같은 입력에 검사를 실행하면 올바른 형식의 XML입니다. 루트 요소는 <catalog>이며, 요소는 모두 9개입니다.라고 알려 줍니다.
CDATA 섹션은 작성한 그대로 남으므로 <script><![CDATA[if (a < b) run();]]></script>는 바뀌지 않고 그대로 나옵니다.
검사기가 잡아내는 오류
많은 XML 포매터는 깨진 마크업을 조용히 “수리”합니다. 예를 들어 의도하지 않은 위치에서 태그를 닫아 버립니다. 이 도구는 문서를 먼저 검사하고 첫 번째 문제에서 멈춥니다. 다음은 실제 메시지입니다.
| 입력 | 메시지 |
|---|---|
<to>Tove</from> |
2행 11열: 2행에서 연 <to> 태그와 닫는 태그 </from>의 짝이 맞지 않습니다 |
Smith & Sons |
1행 16열: "&" 문자만 단독으로 쓸 때는 &로 써야 합니다 |
닫지 않은 <item> |
4행 1열: 3행에서 연 <item> 태그와 닫는 태그 </list>의 짝이 맞지 않습니다 |
<book id=101/> |
1행 10열: "id"의 값은 따옴표로 감싸야 합니다 |
| 최상위 요소 두 개 | 2행 1열: 루트 요소는 하나만 둘 수 있는데 두 번째 루트 요소가 있습니다: <b> |
입력에서 보기를 누르면 커서가 문제 위치로 이동합니다.
“올바른 형식(well-formed)“의 의미
XML 문서가 다음 기본 문법 규칙을 따르면 올바른 형식이라고 합니다.
- 모든 여는 태그에는 짝이 맞는 닫는 태그가 있거나,
<br/>처럼 스스로 닫힙니다. - 태그는 연 순서의 반대로 닫힙니다.
- 루트 요소는 정확히 하나입니다.
- 속성 값은 작은따옴표나 큰따옴표로 감싸고, 한 요소에 같은 속성이 두 번 나오지 않습니다.
- 텍스트 안의
&나<문자는&나<로 씁니다. <?xml ... ?>선언이 있다면 파일의 맨 처음에 와야 합니다.
같은 이름 있는 엔티티는 DOCTYPE에서 선언했을 때만 쓸 수 있습니다. XML 자체가 아는 엔티티는 <, >, &, ', " 다섯 개뿐이기 때문입니다.
팁과 한계
- 검사에는 스키마를 쓰지 않습니다. 올바른 형식이더라도 애플리케이션에 맞지 않는 요소가 들어 있을 수 있습니다.
- 텍스트 안의 공백은 유지됩니다. 텍스트를 다시 배치해야 한다면 직접 고치세요.
- 압축할 때 주석은 남깁니다. 가장 작은 파일이 필요하다면 주석을 먼저 지우세요.
- 모든 작업이 로컬에서 이루어지므로 사내 설정 파일이나 내보낸 데이터도 안심하고 붙여넣을 수 있습니다.
XML을 정렬하는 다른 방법
xmllint. Linux와 macOS에서 xmllint --format file.xml은 들여쓰기된 사본을 출력하고, xmllint --noout file.xml은 오류만 보고합니다. --schema 옵션으로 스키마 기준 검증도 할 수 있습니다.
VS Code. XML 확장(Red Hat의 XML 확장이 흔히 쓰입니다)을 설치한 뒤 Format Document(문서 서식)를 실행합니다.
Notepad++. XML Tools 플러그인이 Pretty Print 명령을 추가합니다.
관련 도구
데이터가 JSON이라면 JSON 포매터를 쓰세요. 설정 파일에는 같은 일을 YAML에 해 주는 YAML 포매터가 있습니다. 웹 페이지에는 XML이 허용하지 않는 HTML 규칙까지 이해하는 HTML 포매터를 쓰세요.