MYMONDAY.ai
서비스스튜디오도구데이터·포맷73CSS 생성기19색상·이미지10인코딩·보안10웹·SEO11개발·데브옵스10파일·내보내기18계산기6가이드

XML 포매터

XML을 붙여 넣으면 들여쓰기, 압축, 접을 수 있는 트리로 보여 주고 첫 문법 오류의 정확한 줄과 열을 알려 줍니다.

  • 브라우저에서 처리
  • 가입 없음
  • 무료

도구 작업 공간

예제
들여쓰기

XML 입력

1줄206byte올바른 XML
정렬됨 · formatted.xml
<?xml version="1.0" encoding="UTF-8"?>
<order id="42">
  <customer>Ari</customer>
  <items>
    <item sku="book">Notebook</item>
    <item sku="pen">Pen</item>
  </items>
  <note>Fish &amp; chips &lt;3</note>
  <!-- paid -->
</order>
크기206byte
압축 후206byte
요소6
속성3
주석1
CDATA0
깊이2

이 XML 포매터는 한 줄로 이어진 SOAP 응답, 사이트맵, 설정 내보내기를 들여쓰기된 문서로 바꿔 주고, 동시에 올바른 XML인지 검사합니다. 브라우저의 DOMParser가 아니라 이 도구를 위해 만든 엄격한 XML 1.0 파서를 쓰기 때문에 어느 브라우저에서나 같은 메시지와 정확한 줄·열로 오류를 알려 주고, 편집기에서 해당 줄이 강조됩니다.

DOM으로 문서를 다시 만드는 포매터와 달리 작성한 내용을 그대로 보존합니다. XML 선언, DOCTYPE, 주석, 처리 명령, CDATA 구간이 출력에 남고, 텍스트와 속성값은 다시 이스케이프되어 &lt;는 &lt; 그대로 유지됩니다. 텍스트와 자식 요소가 섞인 요소는 텍스트를 옮기지 않고 쓴 모양 그대로 한 줄로 출력합니다.

작은 입력은 입력하는 동안 갱신됩니다. 200,000자를 넘으면 페이지가 계속 반응하도록 백그라운드 Worker에서 파싱하고 정렬합니다. 1,000,000자를 넘으면 편집기 대신 크기와 줄 수를 보여 주는 읽기 전용 요약이 나타나지만 정렬과 오류 검사는 계속되며, 비우기를 누르면 편집기로 돌아옵니다. 정렬됨, 압축, 트리 탭을 오가고, 들여쓰기는 공백 2칸·4칸·탭 중에서 고르며, 필요하면 주석을 제거할 수 있습니다. 최대 20 MiB까지 처리하고 아무것도 업로드하지 않습니다. 이 도구는 문법 검사만 하며 DTD나 XSD 검증은 하지 않습니다.

사용 방법

  1. XML 붙여넣기 또는 예제 선택

    입력 창에 문서를 붙여 넣거나 예제로 시작하세요. 상태 배지가 올바른 XML인지 알려 줍니다.

  2. 오류가 있으면 강조된 줄 수정

    문서가 올바르지 않으면 줄과 열이 적힌 메시지가 나오고 편집기에서 그 줄이 표시됩니다. 태그 닫기, 속성값에 따옴표 붙이기, 글자 그대로의 &를 &amp;로 쓰기가 흔한 수정입니다.

  3. 들여쓰기와 주석 선택

    공백 2칸, 4칸, 탭 중에서 고릅니다. 주석 제거를 켜면 정렬 결과와 압축 결과에서 모든 주석이 빠집니다.

  4. 정렬됨·압축·트리 탭 전환

    정렬됨은 들여쓰기된 텍스트, 압축은 들여쓰기와 줄바꿈이 없는 한 줄이고, 트리에서는 가지를 접고 펼 수 있습니다. 트리에서 요소 이름을 누르면 XPath가 복사됩니다.

  5. 통계를 확인하고 복사·다운로드

    통계에는 크기, 압축 후 크기, 요소, 속성, 주석, CDATA, 깊이가 나옵니다. 결과를 복사하거나 formatted.xml, minified.xml로 내려받으세요.

작동 원리

올바른 XML과 유효한 XML

XML 1.0(W3C 권고안)은 올바른 형식(well-formed)을 정의합니다. 루트 요소는 정확히 하나, 모든 시작 태그에 짝이 되는 끝 태그, 올바른 중첩, 따옴표로 감싼 속성값, 한 요소 안에서 중복되지 않는 속성 이름, 예약 문자는 미리 정의된 다섯 엔티티(&lt;, &gt;, &amp;, &quot;, &apos;)로 표기하는 것입니다. 엄격한 파서는 이 규칙을 처음 어기는 곳에서 멈춰야 합니다.

유효성(validity)은 이보다 강한 별개의 성질로, 문서가 DTD나 XML 스키마까지 따르는 것을 뜻합니다. 이 포매터는 앞의 것만 검사합니다. 스키마 검증이 필요하면 올바른 XML이 된 뒤에 스키마 검증기로 확인하세요.

포매터가 바꾸는 것과 그대로 두는 것

요소만 들어 있는 내용은 깊이마다 한 단계씩 들여써서 줄을 나누고, 속성은 원래 순서를 유지합니다. 말단 요소의 텍스트는 앞뒤 공백을 다듬고, 내용이 없는 요소는 자기 닫힘 태그가 되어 <br></br>은 <br/>이 됩니다. 자식 요소 사이의 공백은 데이터형 XML에서 의미가 없으므로 버립니다.

나머지는 모두 보존합니다. <p>Hello <b>bold</b></p>처럼 텍스트가 자식 요소 옆에 있으면, 줄바꿈을 넣는 순간 텍스트에 공백이 생기므로 쓴 모양 그대로 한 줄로 출력합니다. xml:space="preserve" 아래에서도 마찬가지입니다. 텍스트와 속성값은 출력할 때 다시 이스케이프됩니다.

원본정렬 결과
<?xml version="1.0"?>와 DOCTYPE각자 한 줄로 유지
<!-- 주석 -->유지(주석 제거를 켜면 삭제)
<![CDATA[ ... ]]>CDATA 구간 그대로 유지
<a></a><a/>
<a> text </a><a>text</a>
혼합 콘텐츠, xml:space="preserve"텍스트를 건드리지 않고 한 줄로 출력
엔티티로 쓴 & 또는 <다시 이스케이프(&lt;는 &lt; 그대로)

압축 보기, 트리, 통계

압축 탭은 같은 규칙에서 요소 사이의 들여쓰기와 줄바꿈만 없앱니다. 혼합 콘텐츠와 보존된 공백의 텍스트는 유지되지만 &#65; 같은 엔티티 표기와 속성 따옴표는 직렬화 과정에서 정규화될 수 있어 결과가 바이트 단위로 같다고 보장하지 않습니다. XML 선언은 맨 앞에 남습니다. 통계에서 원본 크기와 압축 후 크기를 비교하면 들여쓰기가 얼마나 차지하는지 알 수 있습니다.

트리 탭은 요소 계층을 접을 수 있는 가지로 보여 주고, 이름을 누르면 /catalog/book 같은 XPath가 복사됩니다. 통계 항목은 크기, 압축 후 크기, 요소, 속성, 주석, CDATA, 최대 깊이입니다.

실제 예시

선언, 주석, CDATA, 엔티티가 한 줄에 있는 경우
입력
<?xml version="1.0" encoding="UTF-8"?><!-- catalog --><catalog><book id="b1"><title>Fish &amp; Chips</title><note><![CDATA[a < b]]></note><empty></empty></book></catalog>
출력
<?xml version="1.0" encoding="UTF-8"?>
<!-- catalog -->
<catalog>
  <book id="b1">
    <title>Fish &amp; Chips</title>
    <note><![CDATA[a < b]]></note>
    <empty/>
  </book>
</catalog>

이 입력의 통계는 요소 5개, 속성 1개, 주석 1개, CDATA 1개, 깊이 2입니다. 엔티티는 이스케이프된 채로 남고 빈 요소는 자기 닫힘 태그가 됩니다.

혼합 콘텐츠와 보존된 공백
입력
<doc><p>Hello <b>bold</b> and <i>italic</i>.</p><pre xml:space="preserve">  a
  b</pre><item>  x  </item></doc>
출력
<doc>
  <p>Hello <b>bold</b> and <i>italic</i>.</p>
  <pre xml:space="preserve">  a
  b</pre>
  <item>x</item>
</doc>

문단과 보존 블록은 건드리지 않고, 일반 말단 요소인 item만 앞뒤 공백이 다듬어집니다.

줄과 열이 있는 오류
입력
<a>
  <b>
</a>
출력
표시된 줄을 고치면 정렬된 결과가 나타납니다.

파서는 닫는 태그 </a>이(가) 3행 1열에서 열린 <b>와 맞지 않는다고 알립니다. <a>Tom & Jerry</a>처럼 이스케이프하지 않은 &는 1행 8열의 잘못된 참조로, <a/><b/>처럼 루트가 둘이면 1행 5열 오류로 표시됩니다.

자주 하는 실수

  • 이스케이프하지 않은 &와 꺾쇠

    텍스트나 속성에 쓴 Tom & Jerry, ?a=1&b=2 같은 URL의 &가 파싱 오류의 가장 흔한 원인입니다. &amp;로 쓰세요. 속성값 안의 글자 그대로의 <도 &lt;여야 합니다.

  • 따옴표 없는 속성값

    HTML은 <a href=x>를 허용하지만 XML은 허용하지 않습니다. 모든 속성은 name="value" 또는 name='value' 형태여야 하고, 같은 속성을 한 요소에 두 번 쓸 수도 없습니다.

  • 루트는 하나, 바깥 텍스트는 금지

    최상위 요소가 둘이거나 루트 앞뒤에 텍스트가 있으면 거부됩니다. XML 선언이 있다면 앞에 공백 없이 파일의 맨 처음에 와야 합니다.

  • 혼합 콘텐츠의 공백은 데이터

    <p>a <b>x</b> c</p>의 공백은 텍스트의 일부이므로 포매터가 이런 요소를 한 줄로 출력합니다. 손으로 들여써서 줄을 나누면 문단 텍스트가 달라집니다.

  • 올바른 XML이 스키마 유효성은 아님

    여기를 통과한 문서도 XSD를 강제하는 시스템에서는 요소 순서가 틀렸거나 필수 속성이 빠져서 거부될 수 있습니다.

자주 묻는 질문

이 XML 포매터는 파일을 업로드하나요?

아니요. 파싱과 정렬이 모두 브라우저 탭 안에서 실행되고 텍스트는 서버로 전송되지 않습니다.

주석, CDATA, XML 선언이 유지되나요?

네. XML 선언, DOCTYPE, 주석, 처리 명령, CDATA 구간이 그대로 남습니다. 주석을 없애려면 주석 제거를 켜세요.

XSD나 DTD로 검증할 수 있나요?

아니요. 올바른 형식인지만 검사합니다. 스키마 검증은 XSD를 불러오는 도구나 라이브러리를 쓰세요.

얼마나 큰 XML 파일을 열 수 있나요?

최대 20 MiB입니다. 200,000자를 넘으면 백그라운드 Worker에서 처리하고, 1,000,000자를 넘으면 편집기 대신 읽기 전용 크기·줄 수 요약을 보여 주면서 정렬과 오류 검사는 계속합니다. 비우기를 누르면 입력이 지워지고 편집기로 돌아옵니다. 더 큰 입력은 파싱 전에 거부되고, 1,000단계보다 깊게 중첩된 문서도 거부됩니다.

텍스트와 태그가 섞인 요소가 왜 한 줄로 남나요?

텍스트가 자식 요소 옆에 있는 혼합 콘텐츠에서는 공백이 데이터의 일부이기 때문입니다. 줄바꿈을 넣으면 텍스트가 바뀌므로 쓴 모양 그대로 출력합니다.

요소의 XPath는 어떻게 얻나요?

트리 탭을 열고 요소 이름을 누르면 XPath가 클립보드에 복사됩니다.

올바른 XML과 유효한 XML은 무엇이 다른가요?

올바른 XML은 루트 하나, 짝이 맞는 태그, 따옴표 속성, 이스케이프된 예약 문자 같은 XML 1.0 문법을 지킨 것입니다. 유효한 XML은 거기에 더해 DTD나 스키마까지 따릅니다.

마지막 업데이트: