이전 포스트에서 PHP로 간단한 XML 파일 만드는 방법을 설명하였습니다.
여기서는 이 코드를 응용하여 보겠습니다.
<?php // Data $members = array('소원', '예린', '은하', '유주', '신비', '엄지'); $member_aliases = array('소원'=>'Sowon', '예린'=>'Yerin', '은하'=>'Eunha', '유주'=>'Yuju', '신비'=>'SinB', '엄지'=>'Umji'); $leader = '소원'; $albums = array('Season of Glass', 'Flower Bud', 'Snowflake', 'LOL'); // Create XML $xml = new SimpleXMLElement('<girlgroup />'); // Generate elements $xml->addChild('name', '여자친구')->addAttribute('alias', 'GFRIEND'); $x_members = $xml->addChild('members'); $x_albums = $xml->addChild('albums'); // Array to elements foreach ($members as $member) { $x_member = $x_members->addChild('member', $member); $x_member->addAttribute('alias', $member_aliases[$member]); if ($member == $leader) $x_member->addAttribute('leader', 'yes'); } foreach ($albums as $album) $x_albums->addChild('album', $album); // 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); ?>
저번 포스트에서 설명한 코드보다 약간 길어졌습니다. 미리 값을 대입해 놓은 배열이 추가되고 요소 추가 부분에 코드가 더 추가되어 있는 것을 알 수 있을 것입니다. 그 중 특기할만한 점은 addAttribute 함수의 사용입니다. addChild가 XML 요소를 추가하는 함수였다면, addAttribute는 그 요소에서 속성값을 추가하는 함수입니다.
속성값이라는 것이 무엇인지 HTML 태그를 예로 들어, 새 탭에 구글을 띄우는 링크를 만들기 위한 코드를 쓴다고 한다면 그러기 위해서 하이퍼링크(href)에 구글의 URL(https://www.google.com/)을 넣고 대상(target)에 새로운 공간(_blank)을 넣습니다.
<a href="https://www.google.com/" target="_blank">Google</a>
이렇게 됩니다. 여기서 바로 href와 target에 해당하는 부분이 바로 속성값입니다. addAttribute 함수가 바로 이 속성값을 주기 위한 함수입니다.
다시 코드로 돌아가서,
// Generate elements $xml->addChild('name', '여자친구')->addAttribute('alias', 'GFRIEND'); $x_members = $xml->addChild('members'); $x_albums = $xml->addChild('albums'); // Array to elements foreach ($members as $member) { $x_member = $x_members->addChild('member', $member); $x_member->addAttribute('alias', $member_aliases[$member]); if ($member == $leader) $x_member->addAttribute('leader', 'yes'); }
13번 줄은 ‘여자친구’라는 값을 갖는 name 요소를 추가하면서 동시에 ‘GFRIEND’라는 값을 갖는 alias 속성을 추가하는 코드입니다.
18번 줄부터 22번 줄까지가 $members 배열의 값을 $member에 대입하면서 반복하는 반복문 블록입니다. 이번에는 줄 수가 늘어났으므로 블록을 중괄호({ })로 묶어 줍니다. 일단 19번 줄에서는 members 요소 안에 member 요소들을 추가하면서 동시에 객체 변수 $x_member에다가 대입하고, 20번 줄에서 그 $x_member에다가 $member_aliases 배열에 정의된 문자열을 alias 속성값으로 추가합니다. 그리고, 21번 줄에서는 $member의 값이 미리 정의된 $leader의 값과 일치하면 추가로 ‘yes’라는 값을 갖는 leader라는 속성을 추가합니다.
이렇게 수정된 코드를 실행해 보면,
<?xml version="1.0" encoding="UTF-8"?> <girlgroup> <name alias="GFRIEND">여자친구</name> <members> <member alias="Sowon" leader="yes">소원</member> <member alias="Yerin">예린</member> <member alias="Eunha">은하</member> <member alias="Yuju">유주</member> <member alias="SinB">신비</member> <member alias="Umji">엄지</member> </members> <albums> <album>Season of Glass</album> <album>Flower Bud</album> <album>Snowflake</album> <album>LOL</album> </albums> </girlgroup>
이와 같은 XML 문서가 만들어집니다. 의도한 대로 요소에 속성값이 추가되어 있습니다.
이 코드를 다음과 같이 응용할 수도 있습니다.
$albums = array('EP 1집'=>'Season of Glass', 'EP 2집'=>'Flower Bud', 'EP 3집'=>'Snowflake', '정규 1집'=>'LOL');
// Array to elements foreach ($members as $member) { $x_member = $x_members->addChild('member', $member); $x_member->addAttribute('alias', $member_aliases[$member]); if ($member == $leader) $x_member->addAttribute('leader', 'yes'); } foreach ($albums as $album=>$title) $x_albums->addChild('album', $title)->addAttribute('order', $album);
이렇게 바꾼 코드의 실행 결과는 다음과 같습니다.
<?xml version="1.0" encoding="UTF-8"?> <girlgroup> <name alias="GFRIEND">여자친구</name> <members> <member alias="Sowon" leader="yes">소원</member> <member alias="Yerin">예린</member> <member alias="Eunha">은하</member> <member alias="Yuju">유주</member> <member alias="SinB">신비</member> <member alias="Umji">엄지</member> </members> <albums> <album order="EP 1집">Season of Glass</album> <album order="EP 2집">Flower Bud</album> <album order="EP 3집">Snowflake</album> <album order="정규 1집">LOL</album> </albums> </girlgroup>
1개의 댓글이 있습니다.