PHP에서 XML로 변환기
PHP 클래스나 객체를 붙여넣으세요. 깔끔한 XML이 돌아옵니다.
이 도구가 하는 일
PHP의 SoapClient 호출용 XML 페이로드, WordPress 플러그인 내보내기, 아직도 XML로 말하는 오래된 파트너 연동용 XML을 손으로 만들어본 적이 있다면 그게 얼마나 귀찮은지 잘 아실 겁니다. 여기에 PHP를 붙여넣으면 한 번에 잘 형성된 XML이 돌아옵니다. 생성자 승격된 클래스 하나, value object 파일 전체, 값이 채워진 인스턴스 — 결과는 같습니다: 모든 프로퍼티가 보존된 완전한 XML 문서입니다.
무작정 문자열만 바꾸는 게 아닙니다. 변환기는 최신 PHP 8+를 제대로 읽습니다. 생성자로 승격된 프로퍼티는 선언된 프로퍼티와 동일하게 동작하고, readonly 필드는 일반 요소로 나오며, 타입 지정된 프로퍼티(string, int, float, bool)는 타입이 유지됩니다. DateTimeInterface 값은 ISO-8601 문자열로 렌더링되고, null은 삭제되지 않고 빈 요소가 되며, 배열은 항목당 하나의 자식을 가진 컨테이너 요소로 변환됩니다 — SimpleXMLElement나 DOMDocument가 일반적으로 만드는 것과 동일합니다.
클래스 구조와 메타데이터도 그대로 지켜집니다. 최상위 클래스는 클래스명을 이름으로 하는 루트 요소가 되고, public 프로퍼티는 선언 순서대로 자식 요소가 되며, 중첩된 value object는 인라인으로 펼쳐지고, array 프로퍼티는 래퍼 요소가 됩니다. #[XmlRoot("x")] 같은 PHP 속성이나 @XmlElement("x") 같은 docblock 태그를 지정하면 해당 요소 이름이 바뀝니다. Laravel Eloquent 모델, Symfony Serializer DTO, 평범한 value object 어느 쪽을 붙여넣어도 — 손으로 쓴 SoapVar나 SOAP 요청 본문처럼 XML이 나옵니다.
사용 방법
세 단계. 클래스 하나를 붙여넣든 <code>src/Entity</code> 폴더를 통째로 붙여넣든 흐름은 똑같습니다.
PHP 붙여넣기 (또는 샘플 써보기)
왼쪽 에디터에 PHP를 그대로 넣으세요. 생성자 승격 클래스, readonly value object, 여러 클래스, 값이 채워진 인스턴스 — 다 괜찮습니다. 샘플 불러오기를 눌러 현실적인 Order 예제를 먼저 확인해 보세요.
<?php 태그를 없애거나, 네임스페이스를 지우거나, docblock을 삭제할 필요가 없습니다. IDE에서 보이는 그대로 두세요. 그냥 붙여넣으면 됩니다.
변환 누르기
초록색 변환 버튼을 클릭하세요. 도구가 PHP를 읽고, 모든 클래스와 프로퍼티를 유지한 채 한 번에 XML을 만듭니다. 동작 중에는 잠깐 반짝임이 표시됩니다.
XML 복사
오른쪽 패널이 표준을 준수하는 어떤 파서든 받아들이는 들여쓰기된 잘 형성된 XML로 채워집니다. SoapClient 요청, PHPUnit 픽스처, WordPress 내보내기 파일, API 문서 예제 어디에든 붙여넣을 수 있습니다.
정말 도움이 되는 상황
SoapClient 요청 픽스처 만들기
레거시 SOAP 엔드포인트와 <code>SoapClient</code>로 통신하는데 PHP 클래스와 맞는 요청 본문이 필요할 때. 클래스를 붙여 XML을 받아서 <code>SoapVar</code>로 감싸거나 <code>__doRequest()</code>에 넘기면 됩니다.
WordPress/Drupal XML 내보내기
커스텀 포스트 타입 클래스나 필드 20개짜리 Drupal 엔티티가 바로 편집 가능한 WXR/XML 내보내기 템플릿이 됩니다 — PHP 형태에 맞춰 요소 구조를 손으로 짜는 일은 이제 끝입니다.
Symfony/Laravel의 XML 응답
API는 주로 JSON을 반환하지만 한 클라이언트가 아직도 XML을 원할 때. DTO를 붙여 XML 엔벨로프를 받고, Symfony Response나 Laravel ResponseFactory 예제에 넣고 다음 작업으로 넘어가세요.
PHPUnit 픽스처와 스냅샷 테스트
유닛 테스트의 value object 인스턴스를 통합 테스트, 계약 테스트, 목 SOAP 서버용 XML 픽스처 파일로 바꾸세요 — 눈대중으로 XML 템플릿을 손으로 짜지 않아도 됩니다.
자주 묻는 질문
생성자 승격과 readonly 프로퍼티를 처리하나요?
네. 생성자로 승격된 파라미터(__construct 안의 public string $orderId)는 선언된 프로퍼티와 동일하게 자식 요소가 됩니다. readonly는 직렬화 시 일반 프로퍼티와 똑같이 취급됩니다 — XML이 동일합니다. PHP 8.2의 readonly class도 동작합니다.
여러 클래스를 한 번에 붙여넣을 수 있나요?
네 — 엔티티 폴더 전체나 여러 클래스가 들어있는 한 파일을 붙여넣으세요. 최상위 클래스마다 중첩된 타입이 펼쳐지고 부모 클래스 프로퍼티가 병합되어 나옵니다. 트레이트는 프로퍼티를 기여하는 것으로 처리됩니다. 조용히 누락되는 건 없습니다.
DateTime, null, float, bool은 어떻게 처리되나요?
DateTimeInterface 인스턴스(DateTime, DateTimeImmutable)는 ISO-8601 문자열로 렌더링됩니다. null은 생략되지 않고 빈 요소(<field/>)가 되어 XML 형태가 일관되게 유지됩니다. float은 로케일별 구분자 없는 일반 10진 표기를 쓰고, bool은 true/false 텍스트로 직렬화됩니다 — SimpleXMLElement가 만드는 것과 동일합니다.
배열과 중첩 객체는 어떻게 되나요?
배열 프로퍼티는 항목당 자식 하나를 가진 컨테이너 요소가 됩니다. /** @var OrderItem[] */ public array $items는 <items><OrderItem/><OrderItem/></items>가 됩니다. 연관 배열은 문자열 키를 요소 이름으로 씁니다. 중첩된 value object는 인라인으로 펼쳐집니다 — DOMDocument가 트리를 구성하는 방식과 같습니다.
제 코드가 저장되나요?
PHP는 변환을 위해 백엔드로 전송되며 저장되지 않습니다 — 페이로드를 로그로 남기지 않습니다. 온라인 도구를 쓸 때 늘 그렇듯이, 코드에 정말 민감한 리터럴(DB 비밀번호, API 키)이 있다면 붙여넣기 전에 지우거나 모킹하세요.
매직 메서드나 동적 프로퍼티를 쓰는 코드는요?
동적 프로퍼티(__set이나 stdClass 캐스팅으로 런타임에 추가되는 것)와 매직 getter(__get)는 정적 코드만으로는 추론할 수 없습니다. 도구는 선언된 프로퍼티, 생성자 승격 파라미터, 명시적 할당을 읽습니다. 어떤 필드가 __get으로만 존재한다면, 프로퍼티로 선언해 두면 변환기가 인식할 수 있습니다.
함께 쓰면 좋은 다른 도구
PHP에서 XML로는 퍼즐의 한 조각입니다. 이 도구들과 잘 어울립니다: