이 포스트에서는 PHP로 XML 파일을 만드는 방법을 소개합니다.
PHP로 XML 파일을 만드는 방법은 여러 가지가 있지만 여기서는 SimpleXMLElement 확장 기능을 사용하여 간단하게 만들어 보도록 하겠습니다.
<?php // Data $members = array('소원', '예린', '은하', '유주', '신비', '엄지'); $albums = array('Season of Glass', 'Flower Bud', 'Snowflake', 'LOL'); // Create XML $xml = new SimpleXMLElement('<girlgroup />'); // Generate elements $xml->addChild('name', '여자친구'); $x_members = $xml->addChild('members'); $x_albums = $xml->addChild('albums'); // Array to elements foreach ($members as $member) $x_members->addChild('member', $member); foreach ($albums as $album) $x_albums->addChild('album', $album); Header('Content-Type: application/xml'); print($xml->asXML()); ?>
이 코드는 ‘girlgroup’을 최상위 요소로 하여 걸그룹 여자친구에 대한 간단한 정보를 서술하는 XML 문서를 생성하는 코드입니다. 각 코드를 설명하자면,
3번 줄과 4번 줄은 여자친구의 멤버와 발매 앨범 목록을 배열 변수로 미리 저장해 두는 코드입니다.
7번 줄에서 새로운 XML 객체를 생성합니다. 객체의 최상위 요소 이름을 ‘girlgroup’으로 하기 위해 인수를 <girlgroup />
으로 부여합니다. 여기서 주의해야 할 점은 끝에 슬래시(/)를 넣고 닫아야(>) 한다는 점입니다. 그렇지 않으면 오류를 일으킵니다.
10번 줄에서 12번 줄까지는 여자친구의 그룹 이름과 멤버, 앨범 목록을 구성요소로 추가하기 위한 코드입니다. 10번 줄은 ‘여자친구’라는 값을 갖는 name 요소 하나를 만들기 위해 그냥 넣고, 11번 줄과 12번 줄은 하위 구성요소를 넣기 위해 members와 albums 요소를 생성하되 값을 바로 넣지 않고 각각 $x_members와 $x_albums라는 객체 변수로 대입해 놓습니다.
15번 줄은 미리 정의해서 대입해 놓은 멤버 배열을 기준으로 반복하는 코드입니다. $members 배열의 값을 차례로 $member 변수에 대입하면서 반복하는 것입니다. 그리고 11번 줄에서 미리 정의된 객체 변수 $x_members에다가 각 멤버의 이름을 값으로 갖는 member 요소를 16번 줄에서 추가하게 됩니다. 여기서는 반복할 줄이 한 줄이므로 중괄호({ })를 생략합니다. 18번 줄과 19번 줄도 같은 원리로 $albums 배열에 미리 대입된 앨범 목록을 albums의 하위 요소로 추가합니다.
21번 줄에서 파일 형식이 XML임을 알리는 헤더(Content-Type: application/xml)를 추가하고, 22번 줄에서는 $xml 객체 변수를 XML 파일로 변환해서 화면에 출력하는 것으로 프로그램을 끝냅니다.
이제 이 프로그램을 실행해 보면 웹 브라우저에 ‘This XML file does not appear to have any style information associated with it. The document tree is shown below.’라는 메시지가 뜨고 그 밑으로 XML 코드가 나타날 것입니다. 그러면 성공입니다.
하지만, 이렇게 만들어진 XML 문서를 소스보기해 보면 XML 코드가 한 줄에 몰려 있고 한글이 전부 16진수 유니코드로 변환되어 있을 것입니다. 이를 고치려면 코드를 다음과 같이 바꾸면 됩니다.
// Print $dom = new DOMDocument(); $dom->loadXML($xml->asXML()); $dom->preserveWhiteSpace = false; $dom->formatOutput = true; $dom->encoding = 'UTF-8'; $formattedXML = $dom->saveXML(); Header('Content-Type: application/xml'); print($formattedXML); ?>
이것은 XML 코드를 가지런히 하기 위해 DOM 객체를 정의하는 코드입니다. DOM 객체를 생성한 후, 문서화된 XML을 바로 출력하지 않고 DOM 객체에 넣어 둡니다. 그리고 기존의 띄어쓰기를 제거하고 새로 가지런히 들여쓰기를 한 다음 인코딩을 UTF-8로 지정합니다. 이렇게 해서 최종적으로 정돈된 XML 문서를 $formattedXML 변수에 저장, XML 헤더를 추가하고 $formattedXML의 내용을 출력합니다.
이렇게 수정된 프로그램을 실행해서 소스 보기를 해 보면,
<?xml version="1.0" encoding="UTF-8"?> <girlgroup> <name>여자친구</name> <members> <member>소원</member> <member>예린</member> <member>은하</member> <member>유주</member> <member>신비</member> <member>엄지</member> </members> <albums> <album>Season of Glass</album> <album>Flower Bud</album> <album>Snowflake</album> <album>LOL</album> </albums> </girlgroup>
이와 같이 가지런하게 만들어진 XML 문서를 볼 수 있게 됩니다.
이렇게 해서 PHP로 XML 문서를 간단히 만들어 볼 수 있습니다.
4개의 댓글이 있습니다.