PHP로 간단한 XML 파일 만들기 2

이전 포스트에서 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>

“PHP로 간단한 XML 파일 만들기 2”의 1개의 생각

답글 남기기

이메일 주소는 공개되지 않습니다.