서비스는 XML을 주는데 CI 설정, Helm values, 문서 예제에는 YAML이 필요할 때 쓰는 XML YAML 변환기입니다. 페이지 안의 엄격한 XML 1.0 파서로 문서를 읽고, XML JSON 변환기와 같은 규칙으로 데이터 트리를 만든 다음 YAML로 씁니다. XML에 오류가 있으면 줄과 열로 알려 줍니다.
속성, 속성 옆의 텍스트, 반복 요소, 타입 값은 매핑 패널의 설정을 따릅니다. 속성 접두사(기본 @), 텍스트 키(#text), 항상 배열 스위치, 타입 해석 스위치입니다. 들여쓰기는 2칸 또는 4칸이고 YAML 1.1 단어에 따옴표를 붙일지도 고를 수 있습니다. YAML 출력은 긴 줄을 접지 않습니다.
변환은 로컬에서 실행되고 최대 20 MiB까지 처리하므로 업로드는 없습니다. 결과를 복사하거나 data.yaml로 내려받으세요.
사용 방법
XML 넣기
문서를 붙여 넣거나 예제를 고르세요. XML이 올바르지 않으면 결과 대신 첫 문제의 줄과 열이 적힌 메시지가 나옵니다.
매핑 조정
XML → 데이터 매핑 패널에서 속성 접두사와 텍스트 키를 정하세요. 접두사를 비우면
id="7"이 그냥id: 7키가 됩니다.배열과 타입 결정
항상 배열을 끄면
<item>이 하나일 땐 매핑, 여러 개일 땐 목록이 됩니다. 모든 값이 문자열로 남아야 하면 숫자·불리언으로 해석을 끄세요.들여쓰기와 YAML 1.1 따옴표 선택
2칸 또는 4칸을 고르세요. 결과를 PyYAML, Ruby 같은 1.1 파서가 읽는다면 YAML 1.1 단어 따옴표를 켜 두세요. 거기서는
yes와no가 불리언입니다.복사 또는 다운로드
YAML을 설정에 붙여 넣거나 data.yaml로 내려받으세요. 텍스트와 자식 요소가 섞인 요소가 있으면 안내가 표시됩니다.
작동 원리
XML 트리에서 YAML 문서까지
변환기는 먼저 데이터 트리를 만듭니다. 텍스트만 있는 요소는 스칼라, 속성이나 자식이 있는 요소는 매핑, 같은 이름의 형제는 시퀀스가 되고 루트 요소 이름이 유일한 최상위 키가 됩니다. 이 트리를 JSON, TOML, 코드 변환기가 함께 쓰므로 YAML의 키는 JSON에서 보는 키와 같습니다.
그다음 yaml 라이브러리가 선택한 들여쓰기와 줄 너비 0(줄 접기 끔)으로 씁니다. 실제 줄바꿈이 들어 있는 문자열은 블록 스칼라(|-)로 나오고 긴 텍스트는 한 줄로 유지됩니다. @id, #text처럼 평범한 단어가 아닌 키는 큰따옴표로 감쌉니다.
일부 값에 따옴표가 붙는 이유
따옴표 없는 YAML 스칼라는 읽는 쪽이 같은 문자열로 되돌릴 때만 안전합니다. true나 42처럼 불리언·숫자·null로 읽힐 문자열은 타입이 바뀌므로 따옴표를 붙입니다. 타입 해석이 켜져 있으면 정확히 불리언이나 숫자인 텍스트는 처음부터 데이터 트리에서 타입이 붙어 true, 42로 따옴표 없이 나옵니다.
YAML 1.2는 yes, no, on, off를 평범한 문자열로 보지만 PyYAML, Ruby의 Psych, 여러 Java 라이브러리 같은 YAML 1.1 파서는 불리언으로 읽습니다. YAML 1.1 단어 따옴표(기본 켜짐)를 켜면 이런 단어와 1_000 같은 값에 따옴표가 붙어 두 버전이 같은 결과를 냅니다. YAML 1.2 파서만 읽을 출력이라면 끄세요.
| XML 텍스트 | YAML 출력(기본값) |
|---|---|
| <n>42</n> | n: 42 |
| <n>24.50</n> | n: 24.5 |
| <n>007</n> | n: "007" |
| <n>yes</n> | n: "yes" |
| <n><![CDATA[42]]></n> | n: "42" |
| <n/> | n: "" |
| <n>Ari: Lee</n> | n: "Ari: Lee" |
실제 예시
<order id="1042" paid="true"><customer>Ada</customer><item sku="A1" qty="2">Pen</item><item sku="B7" qty="1">Ink</item><total>24.50</total></order>order:
"@id": 1042
"@paid": true
customer: Ada
item:
- "@sku": A1
"@qty": 2
"#text": Pen
- "@sku": B7
"@qty": 1
"#text": Ink
total: 24.5속성에는 @ 접두사가 붙고 반복되는 item 요소는 매핑의 시퀀스가 됩니다. 속성 접두사를 비우고 텍스트 키를 text로 바꾸면 키가 id, paid, sku, qty, text로 나옵니다.
<config>
<motd>Line one
Line two</motd>
<enabled>yes</enabled>
<version>1.10</version>
<code><![CDATA[42]]></code>
<empty/>
</config>config:
motd: |-
Line one
Line two
enabled: "yes"
version: 1.1
code: "42"
empty: ""줄바꿈이 있으면 블록 스칼라가 되고 yes는 YAML 1.1 설정 때문에 따옴표가 붙습니다. 1.10은 타입 해석 때문에 숫자 1.1이 되었으니, 문자열 1.10을 지키려면 해석을 끄세요. CDATA에는 타입이 붙지 않습니다.
<feed xmlns:dc="http://purl.org/dc/elements/1.1/"><dc:creator>Ari: Lee</dc:creator><entry>- draft</entry></feed>feed:
"@xmlns:dc": http://purl.org/dc/elements/1.1/
dc:creator: "Ari: Lee"
entry: "- draft"xmlns 선언은 일반 속성으로 나타납니다. ': '를 포함하거나 '- '로 시작하는 값은 구조로 읽히지 않도록 따옴표가 붙습니다.
자주 하는 실수
타입 해석이 숫자를 바꿔 씀
24.50은24.5로,1.10은1.1로 나옵니다. 글자 그대로 둬야 하는 버전, 가격, 우편번호가 있으면 숫자·불리언으로 해석을 끄세요. 그러면 모든 값이 문자열로 남고 필요할 때 따옴표가 붙습니다.한 개와 여러 개의 모양이 다름
<item>하나는 매핑, 둘은 목록이 됩니다..item을 순회하는 Helm 템플릿이나 스크립트는 한 개짜리에서 실패하므로, 개수가 달라지는 데이터에는 자식 요소는 항상 배열로를 켜세요.주석과 처리 명령은 옮겨지지 않음
XML 주석은 버려지고 YAML 주석이 되지 않습니다. CDATA 내용은 텍스트로 들어옵니다. 설정에 주석이 필요하면 YAML에서 직접 추가하세요.
혼합 콘텐츠는 뭉개짐
<p>a <b>x</b> c</p>는b: x와a c를 담은 텍스트 키가 됩니다.<b>에 대한 텍스트의 앞뒤 위치는 사라집니다.yes와 no에 대한 YAML 1.1·1.2의 차이
받는 쪽이 YAML 1.2 파서라면
"yes"의 따옴표는 무해합니다. 1.1 파서인데 따옴표 옵션을 끄면yes가 조용히 불리언이 됩니다.
자주 묻는 질문
XML YAML 변환에서 속성이 유지되나요?
네. 요소의 매핑 안에서 속성 접두사(기본 @)로 시작하는 키가 됩니다. 접두사를 비우면 평범한 키 이름이 됩니다.
반복되는 XML 요소는 YAML에서 어떻게 쓰이나요?
요소마다 대시가 하나씩 붙은 블록 시퀀스로, 문서 순서대로 쓰입니다. 요소가 하나여도 시퀀스로 받으려면 자식 요소는 항상 배열로를 켜세요.
왜 일부 값에만 따옴표가 붙나요?
YAML 파서가 불리언, 숫자, null로 읽을 문자열과 ': ', 맨 앞 '- ' 같은 YAML 문법이 들어간 텍스트를 보호하기 위해서입니다. YAML 1.1 단어 옵션이 켜져 있으면 yes 같은 단어에도 붙습니다.
YAML 앵커가 만들어지나요?
아니요. 앵커나 별칭은 만들지 않고 반복되는 구조도 모두 펼쳐서 씁니다.
되돌릴 수 있나요?
완전히는 안 됩니다. 주석, 혼합 콘텐츠에서 텍스트의 위치, 요소 하나와 항목 하나짜리 목록의 차이는 YAML에서 복원할 수 없습니다.
서버로 전송되나요?
아니요. XML 파싱과 YAML 작성이 모두 브라우저 안에서 일어나며 최대 20 MiB까지 처리합니다.
마지막 업데이트:
