왼쪽에 Lua를 붙여 넣고 "변환"을 클릭하면 — XML로 바꿔드립니다Lua 코드 붙여넣기

이 도구가 하는 일

Lua 테이블에서 직접 XML을 만들려고 해본 적이 있다면 — Nginx 설정, 게임 세이브 파일, Redis 스크립트 페이로드 — 얼마나 지루한 일인지 알 겁니다. xml2lua는 반대 방향은 깔끔하게 처리하지만, Lua 테이블에서 XML을 뽑아내려면 여전히 테이블을 직접 순회하며 문자열을 이어 붙여야 합니다. 여기에 Lua를 붙여 넣으면 한 번에 well-formed XML을 돌려줍니다 — 모든 키, 모든 중첩 서브테이블, 모든 배열 항목이 보존됩니다.

이 도구는 Lua 테이블이 실제로 어떻게 동작하는지 알고 있습니다. 해시 스타일 테이블({ name = "Ava", age = 30 })은 문자열 키 이름을 딴 자식 요소를 가진 요소가 됩니다. 배열 스타일 테이블({ "a", "b", "c" }) — Lua 프로그래머들이 "시퀀스"라 부르는 것 — 은 항목마다 자식 하나를 가진 컨테이너 요소가 됩니다. 혼합 테이블(같은 테이블 안에 문자열 키와 숫자 인덱스가 섞여 있는 것)은 해시 부분이 이름 붙은 자식으로, 시퀀스 부분이 인덱스된 자식으로 그 아래에 따라오므로 조용히 사라지는 게 없습니다. 불리언(true, false)과 숫자는 리터럴 텍스트 그대로, nil 값은 사라지는 대신 빈 self-closing 요소로 출력됩니다.

몇 가지 Lua 관용구는 사람이 기대하는 방식으로 처리됩니다. local 선언은 제거되므로 local order = { ... }는 내부 테이블만 사용합니다. 모듈 파일 끝의 return order는 인식되고, 반환된 테이블이 문서 루트가 됩니다. [[ ... ]]로 쓴 긴 문자열은 공백을 유지한 채 텍스트 콘텐츠로 통과합니다. 유효한 XML 요소 이름이 아닌 키 — ["content-type"], [1], ["2024-04"] — 는 문서가 여전히 파싱되도록 안전한 태그 이름으로 다시 써집니다. Lua가 정수 키와 문자열 키를 어떻게 다루는지의 특이점에 익숙하지 않다면 Programming in Lua 책에 유용한 장이 있습니다.

사용법

세 단계. 한 줄짜리 테이블을 붙여 넣든 모듈 파일 전체를 붙여 넣든 똑같이 동작합니다.

1

Lua 붙여넣기 (또는 샘플 써보기)

왼쪽 에디터에 Lua 코드를 떨어뜨리세요. 맨 테이블 리터럴, local t = {...} 할당, 또는 return t로 끝나는 모듈 전체 — 모두 괜찮습니다. 먼저 현실적인 Order 예제로 놀아보고 싶다면 샘플 불러오기를 누르세요.

주석을 제거하거나, require() 호출을 지우거나, 메타테이블을 인라인화할 필요는 없습니다. 그냥 붙여 넣으세요. 테이블 리터럴을 읽고 나머지는 무시합니다.

2

변환 누르기

초록색 변환 버튼을 클릭. 도구는 Lua 테이블 — 배열 부분, 해시 부분, 중첩 서브테이블 — 을 순회하며 한 번에 XML을 만듭니다. 실행 중 짧은 로딩 표시가 보일 겁니다.

3

XML 복사

오른쪽 패널이 인덴트된, well-formed XML로 채워집니다. 표준 준수 파서라면(LuaExpat 포함) 다 받아들입니다. 설정 파일, 테스트 픽스처, 문서에 복사해 넣으세요.

실제로 요긴한 순간

게임 설정 파일

Love2D나 Defold 프로젝트가 레벨 데이터를 Lua 테이블로 보관하는데, 레벨 에디터나 퍼블리싱 파이프라인은 XML을 원한다면 — Lua를 붙여 넣고 XML을 복사. 유지보수할 임시 변환 스크립트 안 만들어도 됩니다.

Nginx / OpenResty 설정 페이로드

<code>ngx.location.capture</code> 호출 안에서 Lua 테이블로 요청/응답 바디를 만드는데 XML 출력이 필요하다면, 이어 붙이는 헬퍼를 쓰는 수고를 덜어 줍니다. 중첩된 테이블은 깔끔히 중첩 요소로 변환됩니다.

Redis Lua 스크립트 페이로드

구조화된 테이블을 반환하는 Redis 스크립트(로깅, 감사 추적, 하류 적재용)는 레거시 소비자에게 XML로 보내야 할 때가 있습니다. 테이블 리터럴을 붙여 넣으면 파이프라인에 바로 들어가는 XML이 나옵니다.

xml2lua와 다른 도구 사이 변환

XML→Lua 방향에 <code>xml2lua</code>를 쓰는 팀은 테스트와 픽스처를 위해 반대 방향이 필요할 때가 있습니다. 손수 만든 시리얼라이저로 가기 전에 Lua 테이블이 XML로 어떻게 보여야 하는지 시각적으로 빠르게 확인할 수 있습니다.

자주 묻는 질문

배열 스타일과 해시 스타일 테이블은 어떻게 다르게 처리되나요?

배열 스타일 테이블({ "a", "b", "c" })은 부모 이름을 딴 번호 붙은 자식(또는 일반 <item> 태그)을 가진 컨테이너 요소가 됩니다. 해시 스타일 테이블({ name = "Ava" })은 이름 붙은 자식을 가진 요소가 됩니다. 혼합 테이블 — 시퀀스 부분과 문자열 키가 둘 다 있는 — 은 두 모양을 나란히 두어 아무것도 잃지 않습니다.

문자열 키와 정수 키는요?

문자열 키는 바로 요소 이름이 됩니다: { orderId = "ORD-4821" }<orderId>ORD-4821</orderId>. 시퀀스(1, 2, 3, ...)로 쓰이는 정수 키는 위치 자식이 됩니다. 빈틈이 있는 정수 키나 정수가 아닌 숫자 키는 매핑을 보존하기 위해 index 속성과 함께 출력됩니다. 기반이 되는 의미론은 Lua 5.4 레퍼런스 매뉴얼을 참고하세요.

중첩 테이블과 혼합 타입도 다루나요?

네 — 임의 중첩, 혼합된 문자열/정수 키, 배열 속 테이블, 테이블 속 배열 모두 가능합니다. 중첩 서브테이블은 자기 자식을 가진 중첩 요소로 통과합니다. 불리언은 true/false로 인쇄되고, 숫자는 리터럴 텍스트 그대로, nil은 빈 self-closing 요소가 되어 레코드 사이에서 모양이 안정적입니다.

하이픈이나 예약 문자가 든 키는 어떻게 되나요?

["content-type"]이나 ["2024-04"] 같은 키는 Lua에서는 합법이지만 날것의 XML 요소 이름으로는 불법입니다. 변환기는 이것들을 안전한 태그(예: content_type)로 다시 쓰고 원래 이름을 속성으로 보존합니다. 엄격한 왕복이 중요하다면 사용 전 출력을 살펴보세요.

모듈 파일 전체를 붙여 넣어도 되나요?

네. local 선언, require() 줄, 헬퍼 함수, 주석은 무시됩니다. 파일이 return t로 끝나면 반환된 테이블이 문서 루트가 됩니다. 최상위 테이블 리터럴 하나만 있다면 그것이 대신 사용됩니다.

제 코드는 저장되나요?

코드는 변환을 위해 백엔드로 보내지고 저장되지 않습니다 — 페이로드도 로깅하지 않습니다. 스크립트가 민감하다면 다른 온라인 도구와 마찬가지로 시크릿을 먼저 지우고 붙여 넣으세요.

필요할 수 있는 다른 도구

Lua to XML은 퍼즐의 한 조각입니다. 이 도구들과 잘 어울립니다: