XML 정렬하기
빽빽하게 이어진 XML을 읽기 쉽게 들여쓰거나 다시 압축하세요. 주석, CDATA 섹션, 네임스페이스는 그대로 유지됩니다. 아무것도 저장하지 않습니다.
- 저장되지 않음
- 대기열 없음, 기다림 없음
- 회원가입 없음, 워터마크 없음
정렬된 XML이 여기에 표시돼요.
사용 방법
XML 붙여넣기
또는 .xml, .svg, .rss, .xsd 파일을 끌어다 놓으세요. 아무것도 저장하지 않습니다.
들여쓰기 선택
공백 2칸, 4칸, 탭, 또는 한 줄로 압축.
복사 또는 다운로드
XML이 깨져 있으면 결과 대신 문제가 있는 줄과 열을 알려 드립니다.
XML 들여쓰기가 보기보다 위험한 이유
XML에서 공백은 기본적으로 의미가 있으며, 사람들이 가장 많이 놓치는 부분이 바로 이것입니다. 포맷을 마음대로 바꿔도 되는 JSON과 달리, XML 파서는 요소 사이의 공백과 줄바꿈을 텍스트 내용으로 보고해야 합니다. 그것을 무시해도 된다고 정하는 것은 스키마가 있을 때 스키마의 몫입니다. 그래서 문서를 다시 들여쓰면 문서가 실제로 바뀝니다. 대부분의 설정 파일과 데이터 파일에서는 아무 문제가 없지만, XHTML이나 DocBook처럼 텍스트와 요소가 나란히 놓인 혼합 콘텐츠 문서에서는 문서가 말하는 내용 자체가 달라질 수 있습니다.
그래서 이 페이지는 건드리면 안 되는 부분을 그대로 둡니다. xml:space="preserve"가 붙은 요소는 내용을 작성된 그대로 유지합니다. 이 속성은 바로 그 뜻을 전하려고 있는 것이기 때문입니다. CDATA 섹션은 손대지 않고 그대로 통과시킵니다. CDATA는 해석되면 안 되는 텍스트를 담으려고 존재하므로, 그 안을 다시 정렬하면 내용이 망가집니다. 엔티티 참조도 가리키는 문자로 풀지 않고 참조 그대로 둡니다.
네임스페이스는 접두사, 선언, 그리고 그에 묶인 요소까지 작성된 그대로 유지됩니다. 당연해 보이지만 그렇지 않습니다. 접두사를 정규화하거나 선언을 적당하다고 생각하는 위치로 옮기는 포맷터는 기술적으로는 동등하지만, 접두사 문자열로 일치 여부를 따지는 도구에서는 실패하는 문서를 만들어 냅니다. 속성 순서도 같은 이유로 유지합니다. XML은 속성 순서에 의미를 두지 않지만, 이전 버전과 비교(diff)할 수 있다는 점이 깔끔함보다 더 가치 있기 때문입니다.
정렬하는 동안 검사하는 것은 올바른 형식(well-formedness)입니다. 모든 태그가 닫혔는지, 올바르게 중첩되었는지, 루트 요소가 하나인지, 허용되는 문자만 쓰였는지, 앰퍼샌드와 꺾쇠괄호가 제대로 이스케이프되었는지를 확인합니다. 이는 XML의 두 가지 기준 중 낮은 쪽입니다. 문서가 완벽하게 올바른 형식이더라도 그 문서를 규정하는 DTD나 스키마 기준으로는 유효하지 않을 수 있으며, 이는 아무리 정렬해도 드러나지 않습니다.
다른 작업이 필요할 때
명령줄에서는 xmllint --format in.xml이 같은 일을 하며, 대부분의 Unix 시스템에 이미 설치되어 있습니다. xmlstarlet fo --indent-tab은 들여쓰기 방식을 더 세밀하게 조절할 수 있습니다. 둘 다 페이지가 메모리에 담을 수 있는 것보다 훨씬 큰 파일도 처리합니다.
문서를 비교하거나, 서명하거나, 정규화된 형태로 저장해야 한다면 포맷은 애초에 맞지 않는 작업입니다. 정규화 XML(Canonical XML), 즉 xmllint --c14n은 동등한 두 문서가 똑같이 귀결되는 단 하나의 정규 형태를 만들며, XML 디지털 서명은 바로 이것에 의존합니다. 서명된 문서를 보기 좋게 정렬하면 서명이 깨지며, 이는 이 사실을 가장 비싸게 배우는 방법입니다.
자주 묻는 질문
제 XML이 어딘가에 저장되나요?
아니요. 서버 호출도, 로그 기록도 없으며 아무것도 저장하지 않습니다. 페이지를 불러온 뒤 인터넷 연결을 끊어도 계속 작동합니다. 이 점은 생각보다 중요합니다. 사람들이 온라인 포맷터에 붙여 넣는 것은 API 응답, 설정 파일, 오류 페이로드이며, 여기에는 토큰, 고객 기록, 내부 호스트 이름이 흔히 들어 있습니다.
정렬한 뒤에도 무엇이 유지되나요?
주석, CDATA 섹션, 처리 명령(processing instruction), XML 선언, 그리고 모든 네임스페이스 접두사가 유지됩니다. 속성 순서도 작성된 그대로입니다. 텍스트만 담은 요소는 한 줄로 둡니다. <title>Hello</title>을 세 줄로 나눈다고 더 보기 좋아지지 않으며, 혼합 콘텐츠 문서에서는 텍스트가 실제로 말하는 내용이 바뀌기 때문입니다.
들여쓰기를 하면 XML의 의미가 바뀌나요?
다른 요소만 담은 요소에서는 바뀌지 않습니다. 하지만 XML에는 공백이 의미 없다는 일반 규칙이 없습니다. 텍스트와 요소가 나란히 놓인 혼합 콘텐츠에서는 추가된 공백이 텍스트의 일부가 됩니다. 그래서 여기서는 텍스트만 담은 요소를 나누지 않고 한 줄로 둡니다. 문서에 실제 혼합 콘텐츠가 있고 공백이 중요하다면 압축하는 쪽이 더 안전합니다.
HTML에도 쓸 수 있나요?
HTML이 올바른 형식의 XML일 때만 가능하며, 실제 HTML은 대부분 그렇지 않습니다. 닫히지 않은 <br>, <img>, <li> 태그, 따옴표 없는 속성, 이스케이프되지 않은 앰퍼샌드는 모두 HTML에서는 허용되지만 XML에서는 유효하지 않습니다. 여기의 파서는 엄격한 XML 파서라서 추측하지 않고 이를 오류로 알려 드립니다. XHTML과 SVG는 완벽하게 정렬됩니다.
SVG는요?
됩니다. SVG도 XML이며, 압축된 SVG를 읽기에 좋은 방법입니다. 경로, 그라디언트, 포함된 스타일은 모두 그대로 유지되고, 요소 사이의 공백만 바뀝니다.
용량 제한이 있나요?
저희가 정한 한도가 아니라 사용 가능한 메모리가 한계입니다. 몇 MB짜리 문서는 즉시 정렬되며, 매우 큰 문서는 저희 쪽의 어떤 제한이 아니라 한 번에 메모리에 담을 수 있는 양에 따라 제한됩니다.
참고: 올바른 형식(well-formed)만 확인합니다. 태그의 짝, 올바른 중첩, 허용되는 문자를 검사한 뒤 다시 들여쓰지만, DTD나 XSD는 가져오지도 적용하지도 않습니다. 따라서 깔끔하게 정렬된 파일이라도 스키마 기준으로는 유효하지 않을 수 있습니다. 네임스페이스는 작성된 그대로 유지됩니다.
내 웹사이트에 이 도구 넣기
블로그, 수업 페이지, 도움말 글 어디에나 무료로 넣을 수 있습니다. 코드 한 줄만 붙여 넣으면 방문자가 페이지에서 바로 사용할 수 있습니다.