Dart에서 XML로 변환기
Dart 클래스나 객체를 붙여넣으세요. 깔끔한 XML을 돌려받습니다.
이 도구가 하는 일
레거시 SOAP 엔드포인트와 통신하는 Flutter 앱, Android 스타일의 XML 설정, RSS 피드 리더 등 Dart 모델에 맞는 XML 페이로드를 만들어야 했다면 그 보일러플레이트가 얼마나 귀찮은지 잘 아실 겁니다. 여기에 Dart를 붙여넣으면 한 번에 잘 구성된 XML을 돌려드립니다. final 필드가 있는 클래스 하나든, 전체 모델 파일이든, 값이 채워진 인스턴스든 — 결과는 같습니다. 모든 필드가 보존된 완전한 XML 문서입니다.
단순한 문자열 치환이 아닙니다. 변환기는 실제 Dart를 읽습니다. required 명명 매개변수는 선언 순서대로 요소가 되고, final 필드는 비 final 필드와 동일하게 동작하며, DateTime 값은 ISO-8601 문자열로 렌더링되고, Duration은 ISO-8601 기간 포맷을 사용하며, num, int, double은 숫자 형태를 유지하고, null(String? 같은 nullable 타입)은 버려지지 않고 빈 요소가 되며, List<T>는 항목마다 자식을 가진 컨테이너 요소가 됩니다 — xml 패키지의 XmlBuilder가 출력하는 것과 같습니다.
클래스 구조도 보존됩니다. 각 최상위 클래스는 클래스명을 딴 루트 요소가 되고, 각 필드는 자식 요소가 되며, 중첩 클래스는 인라인으로 펼쳐지고, Map<K, V>는 <entry><key/><value/></entry> 쌍으로 변환됩니다. json_annotation의 @JsonKey(name: "x") 같은 어노테이션은 요소 이름 변경 힌트로 인식됩니다. Flutter 모델, freezed 스타일 데이터 클래스, 혹은 평범한 Dart POJO — 무엇을 붙여넣든 손으로 작성한 XmlBuilder 호출이 만들어낼 법한 XML이 번거로운 절차 없이 나옵니다.
사용 방법
세 단계입니다. 모델 하나만 붙여넣든 <code>lib/models</code> 폴더 전체를 붙여넣든 흐름은 똑같습니다.
Dart 붙여넣기(또는 샘플 시도)
Dart 코드를 그대로 왼쪽 편집기에 넣으세요. 일반 클래스, 명명 생성자 데이터 클래스, 여러 클래스, 값이 채워진 인스턴스 — 모두 괜찮습니다. 현실적인 Order 예제를 먼저 보려면 샘플 불러오기를 누르세요.
import를 지우거나 part 지시문을 떼거나 어노테이션을 삭제할 필요가 없습니다. IDE에서 보이는 그대로 두세요. 붙여넣기만 하면 됩니다.
변환 누르기
초록색 변환 버튼을 클릭하세요. 도구가 Dart를 읽어 모든 클래스와 필드를 유지한 채 한 번에 XML을 구성합니다. 실행되는 동안 짧은 로딩이 보입니다.
XML 복사
오른쪽 패널이 들여쓰기된, 표준을 준수하는 파서라면 어디서나 받아들일 수 있는 잘 구성된 XML로 채워집니다. SOAP 요청, Flutter 에셋 파일, Android 스타일 설정, 단위 테스트 픽스처 등에 그대로 넣으세요.
실제로 유용한 순간
SOAP 서비스와 통신하는 Flutter 앱
Flutter 앱이 레거시 SOAP 엔드포인트를 호출해야 하는데 요청 본문이 Dart 모델과 맞아야 할 때. 모델을 붙여넣고 XML을 받아 <code>http.post</code>나 <a href="https://pub.dev/packages/xml" target="_blank" rel="noopener">xml</a> 패키지에 넘기세요.
RSS 및 Atom 피드 생성
RSS를 발행하는 팟캐스트/뉴스 앱을 만들고 있나요? 에피소드 모델을 붙여넣고 필요한 XML 형태를 얻은 다음 피드 엔벨로프로 감싸세요 — <code><item></code> 자식 요소를 손으로 셀 필요가 없습니다.
Android/iOS 네이티브 XML 설정
플랫폼 채널에서 쓰는 Dart 모델로부터 Android 스타일 preferences XML이나 iOS plist 같은 구조를 만들어야 할 때. 클래스를 붙여넣고 바로 손볼 수 있는 템플릿을 받으세요.
flutter_test용 테스트 픽스처
값이 채워진 모델을 <code>flutter_test</code>, 위젯 골든 테스트, 모의 HTTP 응답을 위한 XML 픽스처 파일로 변환하세요 — 픽스처 문자열을 손으로 작성하는 것보다 훨씬 빠릅니다.
자주 묻는 질문
여러 클래스를 한 번에 붙여넣어도 되나요?
네 — models.dart 파일 전체나 모델 폴더 전체를 붙여넣어도 됩니다. 각 최상위 클래스는 중첩 클래스가 펼쳐지고 부모 클래스의 필드가 포함된 채 함께 나옵니다. 믹스인은 자신의 필드를 제공하는 것으로 취급됩니다. 조용히 버려지는 것은 없습니다.
freezed나 json_serializable 데이터 클래스와도 동작하나요?
네. freezed 스타일 불변 클래스와 json_serializable 어노테이션이 붙은 모델은 일반 Dart 클래스로 취급됩니다 — 필드는 그대로 반영되고 @JsonKey(name: "x")는 요소 이름 변경 힌트로 인식됩니다. build_runner를 먼저 돌리거나 생성된 .g.dart 파일을 붙여넣을 필요가 없습니다.
DateTime, Duration, null, num은 어떻게 처리되나요?
DateTime은 ISO-8601 문자열(2026-04-21T10:15:00.000Z)로 렌더링됩니다. Duration은 ISO-8601 기간(PT2H30M) 또는 대체로 HH:mm:ss로 출력됩니다. null 값을 가진 nullable 타입은 생략되지 않고 빈 요소(<field/>)가 되어 XML 형태가 일관되게 유지됩니다. num, int, double은 모두 평범한 십진 텍스트로 직렬화됩니다.
List, Map, 중첩 클래스는 어떻게 되나요?
List<T>는 항목마다 자식을 가진 컨테이너 요소가 되고, 자식은 요소 타입의 이름을 가집니다 — List<OrderItem> items는 <items><OrderItem/><OrderItem/></items>가 됩니다. Map<K, V>는 <entry><key/><value/></entry> 쌍이 됩니다. 중첩 클래스는 xml 패키지의 XmlBuilder가 중첩 요소를 만드는 방식과 동일하게 인라인으로 펼쳐집니다.
제 코드가 저장되나요?
Dart는 변환을 위해 백엔드로 전송되지만 저장되지 않습니다 — 페이로드를 로그로 남기지도 않습니다. 온라인 도구를 쓸 때 늘 그렇듯, 코드에 진짜 민감한 리터럴(API 키, 토큰 등)이 있다면 붙여넣기 전에 지우거나 모의 값으로 바꾸세요.
클래스가 dynamic이나 Object? 필드를 사용하면요?
dynamic이나 Object?로 타입이 지정된 필드는 실제 형태가 런타임에야 정해지므로, 할당된 리터럴 값에 기반한 문자열 텍스트로 직렬화됩니다. 더 견고한 XML 출력이 필요하다면 타입을 좁히세요(String, int, 구체 클래스 등). 변환기가 구조를 자동으로 잡아냅니다.
함께 쓰면 좋은 도구
Dart에서 XML로는 퍼즐의 한 조각일 뿐입니다. 이런 도구들과 잘 어울립니다: